繁体   English   中英

为什么我的javascript regexp测试功能不起作用?

[英]Why is my javascript regexp test function not working?

我有一个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”返回true,我会因为\\d{1,2}而返回false
  2. 验证“.25”返回false,我认为由于^\\d*而返回true
  3. 验证“1d”或“1d1”返回true。 它看起来像\\. 当它看起来像是一个正确逃脱的“。”时,它正在读作任何角色。 (点)。

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

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

我错过了什么?

问题是你的$在括号内。 你希望它是组。

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

这应该按照你期望的方式工作。

使用$ inside,它匹配以数字开头的所有内容,因为字符串( $ )的结尾是“可选的”。

您也可以在不添加小数部分的情况下进行分组? 在转义小数点后

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM