我正在使用这个正则表达式来验证浮点数:
var reg = /\d+\.?\d+/;
但它验证了这是真的:
"11.34x"
"11.34abs"
"1a1.34abs"
\d
应该只匹配数字。怎么了?
我正在使用这个正则表达式来验证浮点数:
var reg = /\d+\.?\d+/;
但它验证了这是真的:
"11.34x"
"11.34abs"
"1a1.34abs"
\d
应该只匹配数字。怎么了?
如果您不锚定正则表达式,它将匹配包含匹配子字符串的字符串。
尝试:
var reg = /^\d+\.?\d+$/;
匹配测试字符串的^
开头,并$
匹配结尾。因此,该正则表达式将只匹配只有数字和最多一个“.”的字符串。
编辑——正如所指出的,你使用+
量词意味着你的正则表达式需要数字;如果有小数点,则两边都需要数字。也许这就是你想要的,也许不是。
使用这个正则表达式^\d+(\.\d+)?$
或^\d+([.,]\d+)?$
分隔符可以是逗号或点
考虑改用Number
包装器/构造器函数:
Number('11.34'); // => 11.34
Number('11.34x'); // => NaN
[编辑]正如评论者@VisioN 指出的那样,该函数对空字符串和纯空白字符串有一个边缘情况,因此可以创建一个包装函数:
function reallyParseFloatingPointNumber(s) {
var s = (''+s).trim();
return (s==='') ? NaN : Number(s);
}
if (!"12 34.98 ".replace(/^\s+|\s+$/g,"").match(/^\d+\.?\d+$/))
alert("Please enter numbers in float form")
else alert ("Good Form, Old Chap!")
唉,我又错了!Burning_LEGION 是正确的:
/^\d+(\.\d+)?$/
也会匹配个位数。