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

je sais que cette question est posée plus souvent ici sur Stack, mais je ne peux pas sembler obtenir une réponse directe à partir des questions déjà publiées.

je dois vérifier si tous les caractères spéciaux (sauf -) sont dans une chaîne de caractères, si oui, puis donner une alerte à l'utilisateur.

ce que j'ai jusqu'à présent 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 m'aider sur cette question?

Merci d'avance!

Guido

35
demandé sur Guido Visser 2012-12-12 16:46:52

4 réponses

Si vous voulez vraiment pour 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 n'autorise que les chaînes composées entièrement de caractères sur les gammes a-z,A-Z, 0-9, plus le trait d'Union et les caractères d'espace. Une chaîne contenant un autre caractère causera le alert.

87
répondu bfavaretto 2012-12-12 13:47:47
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
répondu Anton 2015-12-08 05:13:35

Vous pouvez aussi utiliser la méthode whitelist -

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

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

Le regex dans cet exemple est des chiffres, des caractères de mot, des underscores (\w) et des espaces (\s). Le signe d'insertion ( ^ ) indique que nous devons chercher tout ce qui n'est pas dans notre regex, donc rechercher des choses qui ne sont pas des caractères de mots, des soulignements, des chiffres et des espaces.

5
répondu Jay Blanchard 2012-12-12 13:24:54

vous vérifiez si la chaîne contient caractères illégaux. Changer ||s && S.

2
répondu JJJ 2012-12-12 12:49:20