2017-09-23 101 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="">

該解決方案幫助我說完這段時間,但它是不是最好的解決辦法,但我仍然在做這個工作。它可以自由添加你想要的特殊字符來防止它。