用于关键事件输入验证的Javascript正则表达式故障排除帮助

javascript regex for key event input validations troubleshooting help

本文关键字:正则表达式 Javascript 故障 排除 帮助 验证 事件 输入 用于      更新时间:2023-09-26

我正在编写这段代码来检测并只允许文本框中的字母数字和退格/del/箭头键事件。它按预期工作,除了它不阻止%符号,单引号'和句号.显示。我在本地主机、w3cschool网站、笔记本电脑键盘和外部usb键盘上的不同浏览器上进行了测试。请查看代码,看看为什么这些键是允许的,看看它是否是问题与正则表达式/过滤器或键盘的字符码传输。

TIA

编辑如果我像普鲁士建议的那样使用onkeydown事件,脚本将不允许出现句号或单引号,但现在它将允许出现所有的shift/数字字符!@#$%^&*等。

当我同时使用onkeydown和onkeypress事件时(就像现在的代码一样),它将把条目限制为我想要的,除了%符号。我不明白为什么%符号不会被过滤。

如果我把keycheck变量改成keycheck =/%/;然后过滤%符号(是的,即使代码说允许%符号)。非常奇怪。我用的是普通的戴尔笔记本电脑英文键盘。

<head>        
   <script type="text/javascript">
      function keyRestricted(evt) {
          var theEvent = evt || window.event;
          var key      = theEvent.keyCode || theEvent.which;
          var keychar  = String.fromCharCode(key);
          //alert(keychar);
          var keycheck = /[a-zA-Z0-9]/;  
          if (!(key == 8   ||  
                key == 27  ||
                key == 46  || 
                key == 37  || 
                key == 39 )) { // backspace delete  escape arrows
                if (!keycheck.test(keychar)) {          
                theEvent.returnValue = false; //for IE
                    if (theEvent.preventDefault) 
                         theEvent.preventDefault(); //Firefox
                    //alert ("key allowed");
                }   
           }  
      }
   </script>
</head> 
<body>
    Please modify the contents of the text field.
    <input type="text" onKeypress="return keyRestricted(event)" value="" />
</body>

按键事件不用于箭头键,退格键和类似的东西。你不需要检查这个

在这个事件中,你得到了代表按下的键的字符码,并且发生

% charcode 37
. charcode 46
' charcode 39

在按键事件中,移位状态已被应用(例如::码97,码65)。如果你需要在键上有一些特殊的效果,不产生字符按下,你需要听keydown/keyup事件在那些你得到的键码,他们在键盘和移位状态不适用,当你按下键"A"不重要,如果shift被按下(或大写锁定),你总是得到65。

编辑:

去掉第一个if。

编辑:

试题:

function keyRestricted(evt) {
  var theEvent = evt || window.event;
  var rv = true;
  //var key = theEvent.keyCode || theEvent.which;
  var key = (typeof theEvent.which === 'undefined') ? theEvent.keyCode : theEvent.which;
  if (key && (key !== 8)){
    var keychar = String.fromCharCode(key);
    var keycheck = /[a-zA-Z0-9]/;
    if (!keycheck.test(keychar) )
    {
      rv = theEvent.returnValue = false;//for IE
      if (theEvent.preventDefault) theEvent.preventDefault();//Firefox
    }
  }
  return rv;
}

我在Firefox, Chrome和IE(9-7)上测试过了,它似乎确实满足了你的需求。对不起,贴错代码了,试试这个=)