浮点数正则表达式具有意外结果

时间:2013-02-16 00:01:08

标签: javascript regex

我正在使用此正则表达式来验证浮点数:

var reg = /\d+\.?\d+/;

但它确认这是真的:

"11.34x"
"11.34abs"
"1a1.34abs"

\d只应匹配数字。怎么了?

4 个答案:

答案 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+)?$/  

也会匹配单个数字。