2012-12-12 44 views
31

この質問はスタック上で頻繁に尋ねられますが、私はすでに投稿された質問の中からまっすぐ答えを得ることはできません。jQuery:文字列内に特殊文字が存在するかどうか確認してください。

すべての特殊文字( - を除く)が文字列に含まれているかどうかを確認する必要があります。

私はこれまで持っていることはこれです:

if($('#Search').val().indexOf('@') == -1 || $('#Search').val().indexOf('#') == -1 || $('#Search').val().indexOf('$') == -1 || $('#Search').val().indexOf('%') == -1 || $('#Search').val().indexOf('^') == -1 || $('#Search').val().indexOf('&') == -1 || $('#Search').val().indexOf('*') == -1 || $('#Search').val().indexOf('(') == -1 || $('#Search').val().indexOf(')') == -1 || $('#Search').val().indexOf('_') == -1 || $('#Search').val().indexOf('\'') == -1 || $('#Search').val().indexOf('\"') == -1 || $('#Search').val().indexOf('\\') == -1 || $('#Search').val().indexOf('|') == -1 || $('#Search').val().indexOf('?') == -1 || $('#Search').val().indexOf('/') == -1 || $('#Search').val().indexOf(':') == -1 || $('#Search').val().indexOf(';') == -1 || $('#Search').val().indexOf('!') == -1 || $('#Search').val().indexOf('~') == -1 || $('#Search').val().indexOf('`') == -1 || $('#Search').val().indexOf(',') == -1 || $('#Search').val().indexOf('.') == -1 || $('#Search').val().indexOf('<') == -1 || $('#Search').val().indexOf('>') == -1 || $('#Search').val().indexOf('{') == -1 || $('#Search').val().indexOf('}') == -1 || $('#Search').val().indexOf('[') == -1 || $('#Search').val().indexOf(']') == -1 || $('#Search').val().indexOf('+') == -1 || $('#Search').val().indexOf('=') == -1) 
{ 
    // Code that needs to execute when none of the above is in the string 
} 
else 
{ 
    alert('Your search string contains illegal characters.'); 
} 

しかし、これは動作するようには思えない...誰もがこの問題で私を助けることができますか?

ありがとうございます!

あなたは、文字列がすべて不正な文字が含まれているかどうかをチェックする

+2

bazillionの別の条件ではなく、ここで正規表現を使用する必要があります。そして、あなたは**間違いなく**正確にそれが「うまくいかない」と言わなければなりません。 – Jon

+0

これはあなたを助けるかもしれない参照してくださいhttp://stackoverflow.com/questions/10505772/checking-for-any-occurrence-of-special-characters-with-jquery – Hkachhia

答えて

82

が、それは正規表現を使用するように簡単です:

var str = $('#Search').val(); 
if(/^[a-zA-Z0-9- ]*$/.test(str) == false) { 
    alert('Your search string contains illegal characters.'); 
} 

上記のみ許可する完全な範囲a-zA-Z0-9上の文字からなる文字列を、ハイフンにスペース文字を加えたもの。他の文字を含む文字列はalertになります。

+0

これは完全に動作します。非常に短くて早い、ありがとう! –

+0

簡単な説明を追加しました。欠点は、 'é'や'ñ'のような国際的な文字を許可しないということですが、あなたがそれらを許可する必要がないなら、私はそれが行く方法だと信じています。 – bfavaretto

+0

国際的なキャラクターでさえ、うまくいきます;)もう一度ありがとう! –

2

グイド。 ||&&に変更します。あなたが本当にすべてのこれらの特別な文字をチェックしたい場合は

20
var specialChars = "<>@!#$%^&*()_+[]{}?:;|'\"\\,./~`-=" 
var check = function(string){ 
    for(i = 0; i < specialChars.length;i++){ 
     if(string.indexOf(specialChars[i]) > -1){ 
      return true 
     } 
    } 
    return false; 
} 

if(check($('#Search').val()) == false){ 
    // Code that needs to execute when none of the above is in the string 
}else{ 
    alert('Your search string contains illegal characters.'); 
} 
4

また、ホワイトリスト方式を使用することができます -

var str = $('#Search').val(); 
var regex = /[^\w\s]/gi; 

if(regex.test(str) == true) { 
    alert('Your search string contains illegal characters.'); 
} 

この例では正規表現は数字、単語文字、アンダースコア(\ w)をと空白文字(\ sで)です。キャレット(^)は、正規表現以外のものをすべて探すため、単語の文字、アンダースコア、数字、空白以外のものを探します。

+4

を使用してください。これは国際的な文字(中国語、アラビア語など)では使用できません。 –

+0

'== true'? '(regex.test(str)){[...]}'で十分でしょうか? – scniro

+0

それはもちろん@scniroでしょう。私はちょうど明快のために方程式全体を入れました。 –

関連する問題