web-dev-qa-db-fra.com

Motif 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 donnée. Mon expression rationnelle fonctionne mais je ne sais pas pourquoi elle inclut également tous les nombres. Ainsi, lorsque je mets un nombre, cela 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!");
}
40
Piotr Sagalara

S'il te plaît, ne fais pas ça ... petit Unicode BABY ANGEL s comme celui-ci ???? mourons! ◕◡◕ (← 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, il est à 263A ... Mais dans l’antiquité, c’était ALT-1)

et son ami

BLACK SMILING FACE ... Maintenant, il est à 263B ... Mais dans l'Antiquité, c'était ALT-2

Essayez une correspondance négative:

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

(cela ne va accepter que les lettres "standard" et les chiffres "standard" de A à Z.

108
xanatos

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 du cours comme suit:

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

En effet, votre modèle contient un .-^, composé de tous les caractères compris entre . et ^, comprenant des chiffres et plusieurs autres caractères, comme indiqué ci-dessous:

enter image description here

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

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

qui contient tout unicode ponctuation et symboles.

17
Sina Iravanian

Depuis que vous n'avez pas d'espace blanc et de soulignement dans votre classe de personnage, je pense que suivre un regex sera mieux pour vous:

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

Ce qui signifie que tout correspond à autre que [A-Za-z0-9\s_]

Version Unicode:

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

Essayer:

(?i)^([[a-z][^a-z0-9\\s\\(\\)\\[\\]\\{\\}\\\\^\\$\\|\\?\\*\\+\\.\\<\\>\\-\\=\\!\\_]]*)$

(?i)^(A)$: indique que l'expression régulière A est insensible à la casse.

[a-z]: représente n'importe quel caractère alphabétique de a à z.

[^a-z0-9\\s\\(\\)\\[\\]\\{\\}\\\\^\\$\\|\\?\\*\\+\\.\\<\\>\\-\\=\\!\\_]: représente tout caractère alphabétique, à l'exception de a à z, des chiffres et des caractères spéciaux, c'est-à-dire des caractères accentués.

[[a-z][^a-z0-9\\s\\(\\)\\[\\]\\{\\}\\\\^\\$\\|\\?\\*\\+\\.\\<\\>\\-\\=\\!\\_]]: représente n'importe quel caractère alphabétique (accentué ou non).

*: une ou plusieurs occurrences de la regex qui la précède.

3
cdaiga

Si vous utilisez uniquement les caractères ASCII, vous pouvez utiliser les plages hexadécimales de la table ASCII. Voici une regex qui va saisir tous les caractères spéciaux dans la plage de 33-47, 58-64, 91-96, 123-126

[\x21-\x2F\x3A-\x40\x5B-\x60\x7B-\x7E]

Cependant, vous pouvez considérer les caractères spéciaux comme pas caractères normaux. Si nous adoptons cette approche, vous pouvez simplement le faire

^[A-Za-z0-9\s]+

Toutefois, cela n’acceptera pas _^ et probablement d’autres.

3
Serguei Fedorov

S'il vous plaît utiliser ceci .. c'est le plus simple.

\ p {Punct} Ponctuation: L'un des! "# $% & '() * +, -./:; <=>? @ [] ^ _` {|} ~

https://docs.Oracle.com/javase/7/docs/api/Java/util/regex/Pattern.html

    StringBuilder builder = new StringBuilder(checkstring);
    String regex = "\\p{Punct}"; //Special character : `~!@#$%^&*()-_+=\|}{]["';:/?.,><
    //change your all special characters to "" 
    Pattern  pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(builder.toString());
    checkstring=matcher.replaceAll("");
2
Energy

Voici ma variante regex d'un caractère spécial:

String regExp = "^[^<>{}\"/|;:.,~!?@#$%^=&*\\]\\\\()\\[¿§«»ω⊙¤°℃℉€¥£¢¡®©0-9_+]*$";

(Code Java)

2
Chuck

Utilisez ce modèle d'expression régulière ("^ [a-zA-Z0-9] * $") .Il valide la chaîne alphanumérique, à l'exception des caractères spéciaux. 

2
sam

Essayez d’utiliser ceci pour les mêmes choses - StringUtils.isAlphanumeric(value)

1
Ash

Voici mon expression régulière, que j'ai utilisée pour supprimer tous les caractères spéciaux de n'importe quelle chaîne:

String regex = ("[ \\\\s@  [\\\"]\\\\[\\\\]\\\\\\\0-9|^{#%'*/<()>}:`;,!& .?_$+-]+")
1
Suchismita Barik

Nous pouvons y parvenir en utilisant Pattern et Matcher comme suit:

Pattern pattern = Pattern.compile("[^A-Za-z0-9 ]");
Matcher matcher = pattern.matcher(trString);
boolean hasSpecialChars = matcher.find();
0
KayV

(^\W $)

^ - début de la chaîne, \W - correspond à tout caractère autre que Word [^ a-zA-Z0-9 _], $ - fin de la chaîne

0
Sareesh Krishnan