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!");
}
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 son ami
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.
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:
[$&+,:;=?@#|'<>.^*()%!-]
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:
Par caractères spéciaux, vous entendez la ponctuation et les symboles, utilisez:
[\p{P}\p{S}]
qui contient tout unicode ponctuation et symboles.
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_]");
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.
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.
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("");
Voici ma variante regex d'un caractère spécial:
String regExp = "^[^<>{}\"/|;:.,~!?@#$%^=&*\\]\\\\()\\[¿§«»ω⊙¤°℃℉€¥£¢¡®©0-9_+]*$";
(Code Java)
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.
Essayez d’utiliser ceci pour les mêmes choses - StringUtils.isAlphanumeric(value)
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|^{#%'*/<()>}:`;,!& .?_$+-]+")
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();
(^\W $)
^ - début de la chaîne, \W - correspond à tout caractère autre que Word [^ a-zA-Z0-9 _], $ - fin de la chaîne