我有一个Javascript函数可以测试一个regexp,我打算验证正小数,精度为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
有三个问题:
\d{1,2}
^\d*
\.
正在阅读任何角色,当它看起来像是一个正确的逃脱“。 (点)。然而,当我使用像regexpal.com这样的工具时,同样的正则表达式似乎正在验证我期望的方式:
http://regexpal.com/?flags=g®ex=%5E%5Cd%2B(%5C.%5Cd%7B1%2C2%7D%24)%3F&input=
我错过了什么?
答案 0 :(得分:7)
问题是你的$
在括号内。你希望它在小组之后。
/^\d*(\.\d{1,2})?$/
这应该按照你期望的方式工作。
内部有$
,它匹配以数字开头的所有内容,因为字符串($
)的结尾是“可选的”。
答案 1 :(得分:2)
您也可以在不对小数部分进行分组的情况下执行此操作,只需在转义的小数点后添加?
^\d*\.?\d{1,2}$