正则表达式(用于jQuery)验证带有2个小数点的正数

时间:2011-12-17 23:24:43

标签: jquery regex validation match

我需要使用jQuery将字段与正则表达式匹配。目前我正在使用:

 onsubmit: function (settings, td) {
            //select integers only
            var intRegex = /[0-9 -()+]+$/;
            var input = $(td).find('input');
            var original = input.val();

            if (original <= 0) {
                Alert('The amount should be bigger than 0');
                return false;
            }
            if (!original.match(intRegex)) {
                Alert('Please enter a valid number');
                return false;
            }
            else {
                return true;
            }
        }

"abc"这样的字符串未通过检查。但是@#$%"/"这样的无效字符会通过检查,这会导致我的方法出错。

我正在寻找正则表达式:

匹配:1.20, 1, 2.00, 3.1

不匹配:-1.2, abc, 1/2, $, @#$%

我浏览了正则表达式库,但如果我将(^\d*\.?\d*[0-9]+\d*$)|(^[0-9]+\d*\.\d*$)放入我的脚本中,则会出现语法错误...

3 个答案:

答案 0 :(得分:5)

使用:

var intRegex = /^\d+(?:\.\d\d?)?$/;

这应该有效。

答案 1 :(得分:5)

这就是为什么你的原始正则表达式出现误报的原因:

/[0-9 -()+]+$/
     ^^^

我加下划线的部分形成了从空格字符(U+0020)到左括号(U+0028)的范围,使你的正则表达式与此相当:

/[0-9 !"#$%&'()+]+$/

如果你想匹配一个连字符,你需要用反斜杠转义它或将它放在集合的开头或结尾,如下所示:

/[0-9 ()+-]+$/  

另外,如果“正则表达式库”是指RegExLib.com,我不相信我在那里发现的任何正则表达式。您发布的那个就是一个例子:

/(^\d*\.?\d*[0-9]+\d*$)|(^[0-9]+\d*\.\d*$)/

首先,它可以写得更简洁:

/^(\d*\.?\d+|\d+\.\d*)$/

其次,它匹配您可能不想要的123.000000.0000000等字符串。如果您确实只想匹配正数,则必须确保在小数点之前或之后字符串中至少有一个非零数字。这是一种方法:

/^(?:[1-9]\d*(?:\.\d\d?)?|0\.[1-9]\d?|0\.0[1-9])$/

答案 2 :(得分:2)

var regxp = /^\d+(\.\d{1,2})?$/;