仅允许jQuery中的所有语言字母数字

时间:2017-09-23 09:07:31

标签: javascript jquery regex

我正在努力提供一个输入,允许所有语言字母,英语,非英语等,除了特殊字符,总共:

允许

  • 所有语言字母数字
  • 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键盘等移动设备,当你使用非英语键盘时它不会让用户输入,所以我猜它无法识别键盘键码,对不对?这个问题可以修复吗?或者您可以为此分享另一种解决方案吗?有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我只是颠倒了这个逻辑,所以我想在所有语言中使用字母数字,但是很难检测到所有语言&#39; keyCode除非使用Unicode范围,否则我会写一个正则表达式来禁止桌面和手机键盘中所有可能的特殊字符。

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

这个解决方案帮助了我这次,但它不是最好的解决方案,但我还在努力。您可以随意添加所需的特殊字符以防止它出现。