从jquery.validate.js开始,此正则表达式用于验证数字。问题是它在.33上失败并传递0.33。我需要使用或不使用前导0。
^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$
答案 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 指出的空字符串问题。