web-dev-qa-db-fra.com

jQuery: vérifie si des caractères spéciaux existent dans la chaîne

Je sais que cette question est posée plus souvent ici sur Stack, mais je n'arrive pas à obtenir une réponse directe à partir des questions déjà posées.

Je dois vérifier si tous les caractères spéciaux (sauf -) sont dans une chaîne. Dans l'affirmative, donnez une alerte à l'utilisateur.

Ce que j'ai jusqu'ici est ceci:

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

Mais cela ne semble pas fonctionner ... Quelqu'un peut-il m'aider à ce sujet?

Merci d'avance!

Guido

36
Guido Visser

Si vous voulez vraiment vérifier tous ces caractères spéciaux, il est plus facile d'utiliser une expression régulière:

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

Ce qui précède autorise uniquement les chaînes composées entièrement de caractères sur les plages a-z, A-Z, 0-9, plus le trait d'union, un espace. Une chaîne contenant un autre caractère causera le alert.

89
bfavaretto
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.');
}
22
Anton

Vous pouvez également utiliser la méthode de liste blanche -

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

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

L'expression régulière dans cet exemple est chiffres, caractères Word, traits de soulignement (\ w) et espaces (\ s). Le caret (^) indique que nous devons rechercher tout ce qui ne se trouve pas dans notre expression rationnelle. Recherchez donc des éléments qui ne sont pas des caractères Word, des traits de soulignement, des chiffres et des espaces.

5
Jay Blanchard

Vous vérifiez si la chaîne contient tous caractères illégaux. Changer la ||s à &&s.

2
JJJ