2012-11-05 9 views
23

可能性の重複値:
How to prevent users from entering invalid characters inside an input fieldは許可のみ英数字

私はページ上の3つのテキストボックスを持っています。そのうちの1つは、数字、他のアルファベット、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/

は、誰もがこの問題にアプローチする最良の方法をSIこれを教えてもらえます

長すぎるになると感覚を得ますか?

+1

正規表現は、コードサイズを最小化するためのオプションにすることができますが、より多くのを掘るする必要があります。 – Scorpio

+2

ユーザーはクリップボードからテキストを貼り付けることも、文字セットのロケールの違いを貼り付けることもできます。 –

+0

次に、クリップボードのシナリオをどのように処理しますか? – KayKay

答えて

43

..私はあなたのneed..Iは、それが助けを願っごとにそれらを変更する必要があります考えて..but助けるかもしれ

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

いくつかのパターンを試してみてください正規表現ベースのチェックを行うことがあります。以下の例は、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]+$ 

文字のみを含む文字列と一致させるには(または空の文字列)、よりよい解決策

関連する問題