2013-01-14 6 views
6

私のhtmlテキストボックスに%_以外の数字、文字、特殊文字を許可しています。私はパターン/[[email protected]#$^&*()-+=]/を持っています。私はその2つ以外のすべての特殊文字をリストアップしなければならないので、それを行う最良の方法ではないと思います。私はすべての特殊文字を列挙する必要はなく、2つの文字を含まない方法がありますか? BTW、私はjavascriptの正規表現を使用しています。デモのためにregex - "%"と "_"はどのように除外しますか?

http://jsfiddle.net/ce8Th/

助けてくださいを参照してください。

答えて

3

複雑なループは必要ありません。ただ、文字列全体に直接replaceを呼び出す:

$(this).val(function (i, v) { 
    return v.replace(/%|_/g, ''); 
}); 

をここにあなたのフィドルがあります:http://jsfiddle.net/ce8Th/1/

+0

本当にありがとう、私のコードをはるかに簡単にしました。これを受け入れるつもりです。ちょうど数分待ってください。 – NinjaBoy

+0

これは衛生措置ではないことに注意してください。これはうまくいくかもしれませんが、元のリストにない空白、タブ、ランダムな他の文字が許可されることを意味します。 – jakerella

+0

@ジャケレラ - 元の質問には衛生は言及されていませんが(彼の意図であったかもしれませんが、何か*クライアント側は役に立たない)。 –

2

あなたは逆にだけ行うことができます:

/[%_]/ 

if (pattern.test(.... 

それはあなたがドン場合は正規表現を使用しないためにもうれしいです」この場合に大きな違いがないとは限りません。

if ("%_".split().indexOf(text.charAt(i)) > -1) { 
+1

あなたは '/ [^%_] /'を意味すると思いますが、注意する必要があります。タブ、改行、その他の言語文字など、多くの他の文字も含まれます。 – jakerella

2

ホワイトリストが常にベストです。私は長さ修飾子を追加することを除いて、あなたが持っているものおくことをお勧めしますし、開始と終了の文字になります。

/^[[email protected]#$^&*()-+=]+$/ 
1

は、私はあなたの部分を検索するためのLIKEを含むMySQLのクエリのために、このユーザー入力を使用していることを推測でcorrentすることが起こるだろう一致しますか?

もしそうなら、文字を除外しないでください。代わりに、サーバー側でエスケープします。たとえば:

$output = str_replace(Array("%","_"),Array("\\%","\\_"),$input); 
+0

'addslashes($ input);'? – jakerella

+0

@ jakerella 'addslashes'は、' _'と '%'をエスケープ可能と見なしません。 –

+0

うん...それはクールではない。ありがとう。 – jakerella

関連する問題