数字验证正则表达式

时间:2011-12-12 14:19:11

标签: javascript regex

从jquery.validate.js开始,此正则表达式用于验证数字。问题是它在.33上失败并传递0.33。我需要使用或不使用前导0。

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

4 个答案:

答案 0 :(得分:4)

试试这个

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

额外的问号(发现它!)将使小数点前的所有部分都可选。

答案 1 :(得分:2)

可以使用(?=[.])之类的正向前瞻来确保字符串以点(.)开头或遵循先前定义的模式。

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

答案 2 :(得分:1)

有一种更简单的方法可以判断字符串是否引用了数字 -

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

答案 3 :(得分:0)

这可能会迟到但我有更好的答案。试试这个:

^-?((\d+)|([1-9]\d{0,2}(,\d{3})+)|(?=\.))(\.\d+)?$

以上 refp solendil 的解决方案都会接受 0,123,456 000,123 等数字作为有效数字。这些显然不是有效数字。

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