0

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

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

但它验证了这是真的:

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

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

4

4 回答 4

2

如果您不锚定正则表达式,它将匹配包含匹配子字符串的字符串。

尝试:

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

匹配测试字符串的^开头,并$匹配结尾。因此,该正则表达式将只匹配只有数字和最多一个“.”的字符串。

编辑——正如所指出的,你使用+量词意味着你的正则表达式需要数字;如果有小数点,则两边都需要数字。也许这就是你想要的,也许不是。

于 2013-02-16T00:02:01.800 回答
2

使用这个正则表达式^\d+(\.\d+)?$

^\d+([.,]\d+)?$分隔符可以是逗号或点

于 2013-02-16T00:08:36.953 回答
1

考虑改用Number包装器/构造器函数

Number('11.34'); // => 11.34
Number('11.34x'); // => NaN

[编辑]正如评论者@VisioN 指出的那样,该函数对空字符串和纯空白字符串有一个边缘情况,因此可以创建一个包装函数:

function reallyParseFloatingPointNumber(s) {
  var s = (''+s).trim();
  return (s==='') ? NaN : Number(s);
}
于 2013-02-16T00:17:11.277 回答
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+)?$/  

也会匹配个位数。

于 2013-02-16T00:54:58.563 回答