38

この質問はここStackでより頻繁に尋ねられることは知っていますが、すでに投稿されている質問から正解を得ることができないようです。

すべての特殊文字(-を除く)が文字列に含まれているかどうかを確認する必要があります。含まれている場合は、ユーザーにアラートを送信します。

私がこれまでに持っているのはこれです:

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.');
}

しかし、これはうまくいかないようです...誰かがこの問題について私を助けることができますか?

前もって感謝します!

Guido

4

4 に答える 4

97

これらすべての特殊文字を本当に確認したい場合は、正規表現を使用する方が簡単です。

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

上記では、範囲、、、の文字とハイフン、スペース文字のみで構成される文字列のみが許可さa-zA-Zます0-9。他の文字を含む文字列は、を引き起こしますalert

于 2012-12-12T12:50:50.887 に答える
23
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.');
}
于 2012-12-12T13:06:26.940 に答える
6

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

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

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

この例の正規表現は、数字、単語文字、アンダースコア(\ w)、および空白(\ s)です。カレット(^)は、正規表現に含まれていないものをすべて検索することを示しているため、単語の文字、アンダースコア、数字、空白以外のものを検索します。

于 2012-12-12T13:24:54.790 に答える
2

文字列に不正な文字がすべて含まれているかどうかを確認しています。||sをsに変更し&&ます。

于 2012-12-12T12:49:20.377 に答える