使用JQuery进行正则表达式验证的问题

时间:2011-12-23 10:14:00

标签: jquery regex validation jquery-plugins

我想限制用户输入特定范围内的值。所以我使用JQuery 1.7.1

编写了以下代码
var reg = /^[0-9]{1,4}[.]{0,1}[0-9]{0,2}$/g;

$("#txt" + filterID).bind('keypress', function (e) {
    var nn = $("#txtValues");
    var strValue = nn[0].value.toString();
    strValue = $.trim(strValue);
    var bool = reg.test(strValue);
    if (strValue.length == 0 && !((e.which < 48 || e.which > 57) && e.which != 46 && e.which != 8 && e.which != 0)) {
        return true;
    }
    else if (bool) {
        return true;
    }
    else { 
        e.preventDefault();
    }
}); 

当我测试输入框时,它没有按预期工作。它应该允许小数点后2位数的浮点数。有些格式是

  

1
   1.
   1.0
   0
   1.20
   0.0
   1.23
   123.43
   1234.12

我不确定,我做错了什么。在认识到1.它失败了。任何人都可以帮我确定问题吗?

2 个答案:

答案 0 :(得分:2)

在值更新之前触发keypress事件。使用以下代码,使用event.which方法将String.fromCharCode属性转换为字符。

不可打印的击键将生成零event.which,这肯定不是数字或点。

对于RegExp,你必须在点后面对表达式进行分组,并添加一个问号,说“让这个组匹配为可选”。

var reg = /^[0-9]{1,4}(\.[0-9]{0,2})?$/;

$("#txt" + filterID).bind('keypress', function (e) {
    var nn = $("#txtValues");
    var strValue = nn[0].value.toString() + String.fromCharCode(e.which);
    strValue = $.trim(strValue);
    var bool = reg.test(strValue);
    if (bool) {
        return true;
    }
    else { 
        e.preventDefault();
    }
});

该模式将匹配以下内容:

1
1234
1234.5
But not:
1235.    (Change {0,2} to {1,2} if you want to reject this match)
123456
1234.567

答案 1 :(得分:0)

表达式{0,1}{0,2}中的区间运算符允许组重复0到1或0到2次,这允许十进制数和整数。您还应指定文字点\.而不是仅匹配任何字符的点。 如果要在小数点后强制使用2位数字,请尝试将间隔限制为{2}并将其与点一起捆绑到一个组中,例如 /^[0-9]{1,4}(\.{1}[0-9]{2})$/