【问题标题】:Why is my javascript regexp test function not working?为什么我的 javascript 正则表达式测试功能不起作用?
【发布时间】:2012-11-14 15:16:20
【问题描述】:

我有一个 Javascript 函数来测试一个正则表达式,我打算验证正小数,精度为 2:

function isPositiveDecimalPrecisionTwo(str) {
    return /^\d*(\.\d{1,2}$)?/.test(str);
}

当我从代码中调用它时,我没有得到预期的结果。

例如:

var a = isPositiveDecimalPrecisionTwo("1");         //   expect t, returns t
var b = isPositiveDecimalPrecisionTwo("1.2");       //   expect t, returns t
var c = isPositiveDecimalPrecisionTwo("1.25");      //   expect t, returns t
var d = isPositiveDecimalPrecisionTwo("1.257");     // * expect f, returns t *
var e = isPositiveDecimalPrecisionTwo("1.2575");    // * expect f, returns t *
var f = isPositiveDecimalPrecisionTwo(".25");       // * expect t, returns f *
var g = isPositiveDecimalPrecisionTwo("d");         //   expect f, returns f
var h = isPositiveDecimalPrecisionTwo("d1");        //   expect f, returns f
var i = isPositiveDecimalPrecisionTwo("1d");        // * expect f, returns t *
var j = isPositiveDecimalPrecisionTwo("1d1");       // * expect f, returns t *
var k = isPositiveDecimalPrecisionTwo("-1");        //   expect f, returns f
var l = isPositiveDecimalPrecisionTwo("-1.5");      //   expect f, returns f

存在三个问题:

  1. 验证“1.257”或“1.2575”返回真,我认为 由于 \d{1,2} 而返回 false
  2. 验证“.25”返回 false,我认为由于 ^\d* 而返回 true
  3. 验证“1d”或“1d1”返回真。看起来\. 在我看来就像是一个正确转义的“。”时正在读取任何字符。 (点)。

但是,当我使用像 regexpal.com 这样的工具时,相同的正则表达式似乎正在验证我所期望的方式:

http://regexpal.com/?flags=g&regex=%5E%5Cd%2B(%5C.%5Cd%7B1%2C2%7D%24)%3F&input=

我错过了什么?

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    问题是您的$ 在括号内。您希望它在组之后

    /^\d*(\.\d{1,2})?$/
    

    这应该会按您预期的方式工作。

    在里面有$,它匹配所有以数字开头的东西,因为字符串的结尾($)是“可选的”。

    【讨论】:

    • 我想 +1,但这里有问题。 . . OP 发布的正则表达式实际上将匹配任何字符串,无论是否它都以数字开头(因为*)。您的修复是正确的,您的解释是正确的,但只是缺少
    • @ruakh:OP 的原始正则表达式将不匹配 -1。正则表达式将匹配 0 个数字,然后是组的 0,因此它将匹配“无”。
    • Re: 第二句:没错,但正则表达式允许匹配“无”。他的所有示例都返回 true,至少在 Firefox 中是这样。
    • 除非我遗漏了什么,看起来 RegexPal 实际上并没有给出任何关于 是否 正则表达式匹配的指示,只有 what 它火柴;所以当正则表达式匹配“无”时,你看不到它。
    • @ruakh:RegexPal 是对的。以后我会牢记这一点。
    【解决方案2】:

    您也可以不分组小数部分,只需在转义小数点后添加?

    ^\d*\.?\d{1,2}$
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-17
      • 2011-08-16
      • 2011-11-17
      • 1970-01-01
      相关资源
      最近更新 更多