【问题标题】:Javascript regex to match only up to 11 digits, one comma, and 2 digits after itJavascript 正则表达式最多只能匹配 11 位数字、一个逗号和 2 位数字
【发布时间】:2012-11-21 10:48:55
【问题描述】:

我有一个文本框,我希望最多允许 11 位数字、一个可选的逗号以及后面的两个数字。将键按下文本框时不应呈现任何其他内容:

$('#txt').keypress(function (e) {
  var code = e.which;
  var key = String.fromCharCode(code);
  // REGEX TO AVOID CHARS & A DOT (.)
  var pattern = /[a-zA-Z]|\./g;
  var isMatch = pattern.test(key);
  if (isMatch) {
    // DO NOT RENDER CHARS & dot
    e.preventDefault();
  }
});

上面的代码在按下无效键时有效,例如字符或点,但不能确保只有一个逗号和后面只有 2 个数字。

这必须匹配:

12314
123123,44

这不能:

12313,6666

Here 是一个演示。

更新: 必须避免除数字和逗号之外的任何数字,因此我提出的正则表达式无效,因为只能防止点 (.)。

【问题讨论】:

    标签: javascript jquery regex


    【解决方案1】:

    您应该测试您的完整字符串,而不仅仅是当前字母。

    $('#txt').keypress(function (e) {
        var key = String.fromCharCode(e.which);
        var pattern=/^[0-9]{1,11}(,[0-9]{0,2})?$/;
    
        // test this
        var txt = $(this).val() + key;
    
        if (!pattern.test(txt)) {
            e.preventDefault();
        }
    });
    

    jsfiddle example

    【讨论】:

    • 此外,我可以将此代码放在一个函数上,并在客户端单击时调用它。这样我可以防止复制粘贴@Koby 说得更远。
    【解决方案2】:

    regex 将匹配任何包含 1 至 11 位数字的字符串,可选地后跟 , 和另外 2 位数字:^[0-9]{1,11}(,[0-9]{2})?$

    解释:

    ^             # Match the start of the string
    [0-9]{1,11}   # Followed by a maximum of 11 digits
    (,[0-9]{2})?  # Optionally followed by a comma and 2 more digits 
    $             # Followed by the end of the string
    

    看到它在行动here

    【讨论】:

    • 逗号不匹配,我可以输入超过 11 位数字。 jsfiddle.net/d2mRk/14
    • 请不要我想要一个 javascript 正则表达式,而不是 ruby​​ 一个。
    • regex 符合您的标准,而不是 javascript 人,所以不确定在这种情况下出了什么问题。 Ruby 不相关,它只是演示站点,这只是 ERE
    • @senyortoni 实际上是匹配的,但是在构建时匹配字符串的正则表达式和匹配最终字符串的正则表达式是两个不同的东西。它将匹配 11,22 但不匹配 11, 因此 , 被阻止。
    • 这个正则表达式在 javascript 和 ruby​​ 中是一样的。 @senyortoni - 您建议 123, 是一个有效输入,因为您在输入时进行验证。顺便说一句:在键入该块键时进行验证是一个非常糟糕的选择——用户仍然可以粘贴文本、拖动它、删除它的一部分等。另外——你的代码非常错误,你在一个键上使用了模式——a每个步骤的单个字符 - 不是整个文本。
    猜你喜欢
    • 1970-01-01
    • 2021-10-08
    • 2011-05-13
    • 1970-01-01
    • 2022-11-25
    • 2011-07-16
    • 1970-01-01
    • 2016-11-24
    • 1970-01-01
    相关资源
    最近更新 更多