正则表达式在按键上无法正常工作

regex not work correctly on keypress

我想阻止用户在输入时使用字母键 我在 jquery

中使用以下代码
var enK = /^(6[5-9])|([7-9][0-9])|(1([01][0-9]|2[0-2]))$/y;
// this regex is for event code of a-z and A-Z letters in keypress event
$(document).ready(function(){
    $('input').bind('keypress',function(evt){
        var evC = evt.which || evt.charCode;
        if(enK.test(evC)){
            event.preventDefault();
        }
    })
});

测试 1:

输入键:abcdefg

输出:bdf

测试2:

输入键:aaaaaa

输出:aaa

这些测试意味着:

-第一次按键被阻止

-第二次按键与正则表达式不匹配,不会被阻止

-第三次按键被阻止

-第四次按键与正则表达式不匹配,不会被阻止

...

以下代码具有相同的结果。

var enC = /[a-z|A-Z]/g;
$(document).ready(function(){
    $('input').bind('keypress',function(evt){
        var evC =  evt.which || evt.charCode;
        evC = String.fromCharCode(evC);
        if(enC.test(evC)){
            event.preventDefault();
        }
    })
});

现在我该如何解决这个问题?谢谢。

$(document).ready(function(){
  $('input').bind('keypress',function(evt){
    var key = String.fromCharCode(evt.which || evt.charCode);
    if(/[a-z]/i.test(key) === false) evt.preventDefault();
  })
});

这会阻止除 a-z 和 A-Z 之外的所有输入。

https://jsfiddle.net/0b2f7wyL/1/

@fubar 在评论中给出了正确的答案:y 是 'Sticky' 标志,它告诉正则表达式在 lastIndex 处查找匹配项,并且仅在 lastIndex 处(而不是更早或稍后在字符串中),这就是为什么其他检查失败的原因。