【发布时间】: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.257”或“1.2575”返回真,我认为
由于
\d{1,2}而返回 false - 验证“.25”返回 false,我认为由于
^\d*而返回 true - 验证“1d”或“1d1”返回真。看起来
\.在我看来就像是一个正确转义的“。”时正在读取任何字符。 (点)。
但是,当我使用像 regexpal.com 这样的工具时,相同的正则表达式似乎正在验证我所期望的方式:
http://regexpal.com/?flags=g®ex=%5E%5Cd%2B(%5C.%5Cd%7B1%2C2%7D%24)%3F&input=
我错过了什么?
【问题讨论】:
标签: javascript regex