数字验证正则表达式

3

这个正则表达式来自jquery.validate.js,用于验证数字。问题在于它会将.33判断为不合法,而0.33则被认为是合法的。我需要让它能够识别有或没有前导0的数字。

^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$

你对“有效”的数字有什么标准?上述代码对于像2.3e31/3,*+32,35*这样的数字返回false,但它们在某些情况下被认为是有效的。 - RobG
4个回答

4

试试这个

^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$

额外的问号(注意!)将使小数点前面的部分全部变为可选内容。

上述正则表达式将把空字符串""标记为有效数字,这显然是不正确的。请查看我的帖子,以了解修改给定正则表达式以获得所需效果的正确方法。 - Filip Roséen - refp

2
可以使用正向预查(positive lookahead),例如(?=[.]),以确保字符串以点号(.)开头或遵循先前定义的模式。
^-?(?:(?=[.])|\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$

1

有更简单的方法判断一个字符串是否是数字-

function isNumber(str){
    return parseFloat(str)=== Number(str);
}

尽管 parseFloatNumber 无法处理写成 100,000,000.42 的数字。 - Filip Roséen - refp

0
这可能有点晚了,但我有一个更好的答案。试试这个:
^-?((\d+)|([1-9]\d{0,2}(,\d{3})+)|(?=\.))(\.\d+)?$

上面refpsolendil提供的解决方案都会接受像0,123,456000,123这样的数字作为有效输入。显然,这些并不是有效的数字。

这个解决方案确保第一个逗号前的部分以非零数字开头。它还解决了refp指出的空字符串问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接