【问题标题】:Issue with RegularExpression validation using JQuery使用 JQuery 的正则表达式验证问题
【发布时间】:2011-12-23 10:13:59
【问题描述】:

我想限制用户输入特定范围内的值。所以我使用 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. 它失败了。有人可以帮我确定问题吗?

【问题讨论】:

  • 什么没有按预期工作?您在此处命名的有效数字正是您在正则表达式中定义的数字。
  • 你要求有一个分数并且它有两位数吗?
  • 当我以 HTML 形式测试文本框时,它允许 '1.',然后它不允许任何其他数字,它应该允许。

标签: jquery regex validation jquery-plugins


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 字符类[.]中的点匹配点,而不是任何字符。
    猜你喜欢
    • 2014-03-17
    • 1970-01-01
    • 1970-01-01
    • 2012-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多