这个正则表达式来自jquery.validate.js,用于验证数字。问题在于它会将.33判断为不合法,而0.33则被认为是合法的。我需要让它能够识别有或没有前导0的数字。
^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$
这个正则表达式来自jquery.validate.js,用于验证数字。问题在于它会将.33判断为不合法,而0.33则被认为是合法的。我需要让它能够识别有或没有前导0的数字。
^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$
试试这个
^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$
(?=[.])
,以确保字符串以点号(.
)开头或遵循先前定义的模式。^-?(?:(?=[.])|\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$
有更简单的方法判断一个字符串是否是数字-
function isNumber(str){
return parseFloat(str)=== Number(str);
}
parseFloat
和 Number
无法处理写成 100,000,000.42
的数字。 - Filip Roséen - refp^-?((\d+)|([1-9]\d{0,2}(,\d{3})+)|(?=\.))(\.\d+)?$
上面refp和solendil提供的解决方案都会接受像0,123,456或000,123这样的数字作为有效输入。显然,这些并不是有效的数字。
这个解决方案确保第一个逗号前的部分以非零数字开头。它还解决了refp指出的空字符串问题。