Подтвердить что ты не робот

JQuery: проверить, существуют ли специальные символы в строке

Я знаю, что этот вопрос чаще задают здесь на 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.');
}

Но это, похоже, не работает... Может ли кто-нибудь помочь мне в этом вопросе?

Спасибо заранее!

Гвидо

4b9b3361

Ответ 1

Если вы действительно хотите проверить все эти специальные символы, проще использовать регулярное выражение:

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

Вышеупомянутые строки допускают только строки, состоящие исключительно из символов в диапазонах a-z, a-z, 0-9, плюс дефис пробельных символов. Строка, содержащая любой другой символ, вызовет alert.

Ответ 2

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

Ответ 3

Вы также можете использовать белый список -

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

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

Регулярное выражение в этом примере - это цифры, слова, символы подчеркивания (\ w) и пробелы (\ s). Каретка (^) указывает, что мы должны искать все, чего нет в нашем регулярном выражении, поэтому ищите вещи, которые не являются символами слов, подчеркиваниями, цифрами и пробелами.

Ответ 4

Вы проверяете, содержит ли строка все незаконные символы. Измените || на && s.