火狐浏览器的正则表达式问题

3

我正在尝试使用正则表达式来限制输入字段中只能输入字母、'-'和退格键。我需要能够使用左右箭头键和删除键。我试图使用以下代码实现:

$("#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],如果允许箭头和删除键,则还会允许使用'和%字符。


1
keyCode 是一个数字,不确定为什么你把它们当作字符串。 - epascarello
我查看了那个答案。问题不在于Firefox上的按键码无法工作,而是它们允许箭头/删除键和'和%字符。我只需要箭头/删除键能够工作。 - parrigin777
1个回答

0

我最终找到了解决方法。在IE和Chrome中,keyCode和Which值是相同的。但在Firefox中,左箭头的keyCode值为37,而which值为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;      
      }        
   }
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接