首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正则表达式在按键时不能正常工作

正则表达式在按键时不能正常工作
EN

Stack Overflow用户
提问于 2017-08-07 12:56:48
回答 1查看 1.9K关注 0票数 0

我希望防止用户在输入时使用字母键,并在jquery中使用以下代码

代码语言:javascript
复制
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

这些测试意味着:

-First按键被阻止

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

-Third按键被阻止

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

..。

下面的代码有相同的结果。

代码语言:javascript
复制
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();
        }
    })
});

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-07 13:27:40

代码语言:javascript
复制
$(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 (而不是字符串中的更早或更晚)查找匹配,这就是为什么其他检查失败的原因。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45539655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档