我正在尝试创建允许
的正则表达式验证 a)最多3个小数位的十进制数,大于零
b)正数或负数但非零数字,最多3位小数
必须验证带有(+)的以下项目,而
不应验证( - )(a)中
(+) 0,872
(+) 0,87
(+) 0,8
(+) 0,001
(+) 1,000
(+) 1,00
(+) 1
(+) 80,546
(+) 80,000
(+) 81,001
(-) 0
(-) 0,0
(-) 0,00
(-) 0,000
也
(b)最有可能在数字之前允许减去( - )。
我为(a)取得的最佳结果是
^(?=,*[0-9])\d*\,?\d{1,3}$
问题的最佳解决方案是什么?
P.S。 :我使用它作为MVC模型RegularExpression属性值与jQuery验证。所以Python和其他RegExp引擎验证都是不可能的。
答案 0 :(得分:1)
您可以尝试使用包含两个条件的简单if
语句。
!parseInt(number)
- 数字为零number > parseInt(number)
- 该数字超过3位小数(请注意我之前将该数字乘以1000)
function checkNumber(number) {
number = Math.abs( parseFloat(number) * 1000 );
if (!parseInt(number) || number > parseInt(number)) {
return false;
}
return true;
}
/**
* EXAMPLES
*/
checkNumber(0.872); //true
checkNumber(1.00001); //false
checkNumber(0.00); //false
checkNumber(0.87); //true
checkNumber(0.87215); //false
答案 1 :(得分:1)
以下正则表达式匹配您的所有示例及其否定对应项(并拒绝您的不匹配示例)以及其他一些测试用例:
^-?(?!0(,0+)?$)\d+(,\d{1,3})?$
允许.
作为千分隔符使用:
^-?(?!0(\.000)*(,0+)?$)\d+(\.\d{3})*(,\d{1,3})?$