2017-08-07 42 views
0

正常工作,我想阻止用户使用输入 字母键和我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(); 
     } 
    }) 
}); 

的Test1:

输入键:ABCDEFG

输出:bdf

Test2:

输入按键:AAAAAA

输出:AAA

这些试验是指:

- 第一按键防止

-Second按键不匹配正则表达式到并不会阻止

- 第三按键被阻止

- 第四个按键不匹配正则表达式并且不会阻止

...

以下代码具有相同的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(); 
     } 
    }) 
}); 

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

+0

你的正则表达式并没有做任何接近检查任何字母的操作。根据你提供的内容,我不知道你在这里要做什么。 –

+0

@SpencerWieczorek它检查键码。 'a' = 97,等等。 – Jorg

+1

@Jorg检查数值而不是检查键码是否容易?正则表达式对数字范围并不是很好。 –

回答

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是“粘着”标志,它告诉正则表达式查找匹配的lastIndex的,只在lastIndex的(不早于或晚于字符串),这就是为什么其他检查失败的原因。