2017-09-23 83 views
3

我试图让一个输入,允许所有语言的字母,英语,非英语等除了特殊字符,总数:只允许所有语言的字母数字jQuery中

允许:

  • 所有语言的字母数字
  • CTRL/ALT/SHIFT/SPACE/BACKSPACE/SPACE

禁止:

JSFiddle

$('#txtFirstName').on('keydown paste',function(e) { 
    if (e.shiftKey || e.ctrlKey || e.altKey) { 
     e.preventDefault(); 
    } 
    else { 
     var key = e.keyCode; 
     if (!((key == 8) || (key == 32) || (key == 46) || 
       (key >= 35 && key <= 40) || (key >= 65 && key <= 90) || 
       (key >= 48 && key <= 57))) { 
      e.preventDefault(); 
     } 
    } 
}); 

好了,一切看起来不错,在桌面上工作得很好,但它不是像Android或iPhone的键盘,移动设备时,使用非英语语言键盘它不会让用户输入,所以我猜它无法识别键盘的键码,对吗?这个问题能解决吗?或者你能分享另一个解决方案吗?任何想法?

+0

为什么不允许输入时,你可以使用特定的格式(通过正则表达式)输入必须匹配? – Vivick

+0

@Vivick如何定义所有语言的正则表达式模式,如阿拉伯语,中文和日语等?得到了解决方案? – Pedram

+0

任何例子或更多的解释? @WiktorStribiżew – Pedram

回答

0

我只是做这个逻辑反向,所以我想允许在所有语言中的字母数字,但很难检测到所有语言keyCode,除非使用Unicode的范围内,但我写的正则表达式来禁止在桌面上的所有可能的特殊字符和手机键盘。

$('#txtFirstName').on('keydown paste', function(e) { 
 
    var pattern = /[`[email protected]#$%^&*()_|+\-=?;:..’“'"<>,€£¥•،٫؟»«\{\}\[\]\\\/]+/gi; 
 
    if (pattern.test($(this).val())) { 
 
    alert('not allowed'); 
 
    $(this).val($(this).val().replace(pattern, '')); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input id="txtFirstName" value="">

该解决方案帮助我说完这段时间,但它是不是最好的解决办法,但我仍然在做这个工作。它可以自由添加你想要的特殊字符来防止它。