我正在使用此正则表达式来验证浮点数:
var reg = /\d+\.?\d+/;
但它确认这是真的:
"11.34x"
"11.34abs"
"1a1.34abs"
\d
只应匹配数字。怎么了?
答案 0 :(得分:2)
如果你没有锚定正则表达式,它将匹配包含匹配的子字符串的字符串。
尝试:
var reg = /^\d+\.?\d+$/;
^
匹配测试字符串的开头,$
匹配结束。因此,正则表达式只匹配除了数字而且只有一个“。”的字符串。
编辑 - 正如所指出的,您使用+
量词意味着您的正则表达式需要数字;如果有一个小数点,那么它需要两边的数字。也许这就是你想要的,也许不是。
答案 1 :(得分:2)
使用此正则表达式^\d+(\.\d+)?$
或^\d+([.,]\d+)?$
分隔符可以是逗号或点
答案 2 :(得分:1)
请考虑使用Number
wrapper/constructor function:
Number('11.34'); // => 11.34
Number('11.34x'); // => NaN
[编辑] 正如评论者@VisioN指出的那样,该函数有空和纯空白字符串的边缘情况,所以可能会创建一个包装函数:
function reallyParseFloatingPointNumber(s) {
var s = (''+s).trim();
return (s==='') ? NaN : Number(s);
}
答案 3 :(得分:0)
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+)?$/
也会匹配单个数字。