137 votes

Modèle de Regex incluant tous les caractères spéciaux

Je veux écrire une expression régulière simple pour vérifier si un caractère spécial existe dans une chaîne de caractères donnée. Mon expression régulière fonctionne mais je ne sais pas pourquoi elle inclut aussi tous les chiffres, donc quand je mets un chiffre, elle renvoie une erreur.

Mon code :

//pattern to find if there is any special character in string
Pattern regex = Pattern.compile("[$&+,:;=?@#|'<>.-^*()%!]");
//matcher to find if there is any special character in string
Matcher matcher = regex.matcher(searchQuery.getSearchFor());

if(matcher.find())
{
    errors.rejectValue("searchFor", "wrong_pattern.SearchQuery.searchForSpecialCharacters","Special characters are not allowed!");
}

281voto

xanatos Points 30513

S'il vous plaît, ne faites pas ça... petit Unicode BABY ANGEL comme celui-ci sont en train de mourir ! ( ce ne sont pas des images) (ni la flèche !)

Et vous tuez 20 ans de DOS :-) (le dernier smiley s'appelle WHITE SMILING FACE ... Maintenant, c'est à 263A ... Mais dans les temps anciens, c'était ALT-1 )

et son ami

BLACK SMILING FACE ... Maintenant, c'est à 263B ... Mais dans les temps anciens, c'était ALT-2

Essayez une correspondance négative :

Pattern regex = Pattern.compile("[^A-Za-z0-9]");

(cela n'ira que A-Z lettres "standard" et "standard". 0-9 digits.)

51voto

Jerry Points 40870

Vous avez un tiret au milieu de la classe de caractères, ce qui signifie une plage de caractères. Mettez le tiret à la fin de la classe comme ceci :

[$&+,:;=?@#|'<>.^*()%!-]

34voto

Sina Iravanian Points 7246

C'est parce que votre modèle contient un .-^ qui est constitué de tous les caractères compris entre et incluant . y ^ qui comprend des chiffres et plusieurs autres caractères, comme indiqué ci-dessous :

enter image description here

Si par caractères spéciaux, vous entendez la ponctuation et les symboles, utilisez :

[\p{P}\p{S}]

qui contient tous les unicodes la ponctuation et les symboles.

31voto

anubhava Points 172509

Étant donné que vous n'avez pas d'espace et de trait de soulignement dans votre classe de caractères, je pense que la regex suivante vous conviendra mieux :

Pattern regex = Pattern.compile("[^\w\s]");

Ce qui signifie que tout ce qui n'est pas [A-Za-z0-9\s_]

Version Unicode :

Pattern regex = Pattern.compile("[^\p{L}\d\s_]");

18voto

Pour les personnes (comme moi) qui cherchent une réponse pour les caractères spéciaux comme Ä etc., il suffit d'utiliser ce modèle :

  • Seulement du texte (ou un espace) : "[A-Za-zÀ-u ]"

  • Texte et chiffres : "[A-Za-zÀ-u0-9 ]"

  • Texte, chiffres et certains caractères spéciaux : "[A-Za-zÀ-u0-9(),-_., ]"

Regex commence simplement à l'index ascii et vérifie si un caractère de la chaîne se trouve dans les deux index [startindex-endindex].

Vous pouvez donc ajouter n'importe quelle gamme.

Finalement, vous pouvez jouer avec un outil pratique : https://regexr.com/

Bonne chance ;)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X