2012-11-05 134 views
23

可能重複:
How to prevent users from entering invalid characters inside an input field只允許字母數字值

我有一個頁面上的文本框3。其中一個應該允許數字,其他字母和第三個數字或字母。

由於這是唯一的要求,我不想使用驗證插件或任何其他第三方插件。我如何通過使用純jQuery創建我自己的插件來實現這一點?

這是我做了什麼,但我得到一種感覺,代碼會變得太長

$(this).keydown(function(e) 
     { 
      var key = e.charCode || e.keyCode || 0;    
      return (
       key == 8 || 
       key == 9 || 
       key == 46 || 
       (key >= 37 && key <= 40) || 
       (key >= 48 && key <= 57) || 
       (key >= 96 && key <= 105)); 
     }); 

http://jsfiddle.net/Cvus8/

誰能告訴我這對解決這個問題的最佳方式是什麼?

+1

正則表達式可以最小化代碼大小的選擇,但你必須更多的去挖掘。 – Scorpio

+2

不要忘記,用戶還可以粘貼剪貼板中的文本,以及字符集中的區域差異。 –

+0

那麼我該如何處理剪貼板場景? – KayKay

回答

43

更好的解決方案可能會使用基於正則表達式的檢查。下面的示例將限制在該領域唯一的字母數字字符ID text

$('#text').keypress(function (e) { 
    var regex = new RegExp("^[a-zA-Z0-9]+$"); 
    var str = String.fromCharCode(!e.charCode ? e.which : e.charCode); 
    if (regex.test(str)) { 
     return true; 
    } 

    e.preventDefault(); 
    return false; 
}); 
+2

這不適用於!@#$%^&*() – CountMurphy

+1

@CountMurphy這樣的符號答案中的正則表達式旨在僅允許大寫/小寫字母和數字。它不允許設計符號。如果您需要符號,則可以展開正則表達式以包含這些符號。 – Kami

+0

看起來我在我的測試代碼中犯了一個錯誤。上面提到的符號顯示在我的文本框中。我的錯誤,你的解決方案有效。 – CountMurphy

10

的範圍是1-9的一個數位,接着是零個或多個其它數字:

​​

確保的字符串僅包含(ASCII)的字母數字字符,下劃線和空格

^[\w ]+$ 

只有字母表無空格或_

^[a-zA-Z]+$ 

要匹配僅包含這些字符的字符串(或空字符串),嘗試

^[a-zA-Z0-9_]*$ 

一些模式,可以幫助..但我認爲你將不得不修改它們按你的need..I希望它能幫助..