Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Firefox上的正则表达式问题_Javascript_Jquery_Regex_Firefox_Web - Fatal编程技术网

Javascript Firefox上的正则表达式问题

Javascript Firefox上的正则表达式问题,javascript,jquery,regex,firefox,web,Javascript,Jquery,Regex,Firefox,Web,我试图使用正则表达式只允许输入字段中的字母“-”和退格。我需要能够使用左右箭头键和删除键。我试图用以下方法来实现这一点: $("#input").keypress(function (e) { var regex = new RegExp("^[a-zA-Z-\b]+$"); var key = String.fromCharCode(!e.charCode ? e.which : e.charCode); if((!(e.keyCode == 37 || e.keyCode

我试图使用正则表达式只允许输入字段中的字母“-”和退格。我需要能够使用左右箭头键和删除键。我试图用以下方法来实现这一点:

$("#input").keypress(function (e) {
   var regex = new RegExp("^[a-zA-Z-\b]+$");
   var key = String.fromCharCode(!e.charCode ? e.which : e.charCode);
   if((!(e.keyCode == 37 || e.keyCode == 39 || e.keyCode == 46))){
      if(!regex.test(key)){
        return false;       
      }        
   }    
});
我将检查该键是否不是左箭头(37)、右箭头(39)或删除键(46),然后检查该键是否不在正则表达式中

这适用于IE和Chrome,但在Firefox上,键代码37和39也分别对应于“和%


关键代码适用于所有浏览器,问题是[仅在firefox上]如果我允许使用箭头和删除键,那么它也允许使用“和%”字符。

我实际上能够解决这个问题。对于IE和Chrome,键码和哪些值相同。在Firefox上,左箭头的keyCode值为37,但该值为0

我通过以下方式解决了这个问题:

$("#input").keypress(function (e) {
   var regex = new RegExp("^[a-zA-Z-\b]+$");
   var key = String.fromCharCode(!e.charCode ? e.which : e.charCode);             
   if(!((e.keyCode == 37 && e.which == 0) || (e.keyCode == 39 && e.which == 0) || (e.keyCode == 46 && e.which == 0))){
      if(!regex.test(key)){
         return false;      
      }        
   }
});

keyCode是一个数字,不知道为什么要把它们作为字符串。可能是我查过的答案的重复。这并不是因为键码在Firefox上不起作用,而是它们允许使用箭头键/删除键以及“和%”字符。我只需要箭头键/删除键就可以了。