验证最多x位数大于零的十进制值

时间:2013-11-22 13:16:52

标签: jquery regex validation model-view-controller decimal

我正在尝试创建允许

的正则表达式验证

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引擎验证都是不可能的。

2 个答案:

答案 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})?$

DEMO on RegexPal


允许.作为千分隔符使用:

^-?(?!0(\.000)*(,0+)?$)\d+(\.\d{3})*(,\d{1,3})?$

DEMO on RegexPal