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

时间:2017-08-07 04:56:48

标签: javascript jquery regex validation 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

这些测试意味着:

- 防止第一次按键

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

- 防止第三次按键

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

...

以下代码具有相同的resualt。

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();
        }
    })
});

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

1 个答案:

答案 0 :(得分:1)

$(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中查找(不在字符串中更早或更晚) ),这就是其他检查失败的原因。