Regex pattern y compris tous les caractères spéciaux
Je veux écrire une expression régulière simple pour vérifier si dans une chaîne donnée existe un caractère spécial. Mon regex fonctionne mais je ne sais pas pourquoi il inclut également tous les nombres, donc quand je mets un certain nombre, il 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!");
}
12 réponses
S'il te plaît, ne fais pas ça... petit Unicode bébé ange s 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 visage souriant blanc ... Maintenant, il est à 263A... Mais dans les temps anciens, C'était ALT-1)Et son ami
☻
VISAGE SOURIANT NOIR ... Maintenant, il est à 263B... Mais dans les temps anciens, C'était ALT-2Essayez un négatif match:
Pattern regex = Pattern.compile("[^A-Za-z0-9]");
(cela va ok seulement A-z "standard" lettres et "standard" chiffres.
Vous avez un tiret au milieu de la classe de caractères, ce qui signifie une plage de caractères. Mettre le tiret à la fin de la classe comme ceci:
[$&+,:;=?@#|'<>.^*()%!-]
C'est parce que votre modèle contient un {[1] } qui est tous les caractères entre et y compris .
et ^
, qui comprenait des chiffres et plusieurs autres caractères comme indiqué ci-dessous:
Si par caractères spéciaux, vous voulez dire la ponctuation et les symboles utilisent:
[\p{P}\p{S}]
Qui contient Tous les signes de ponctuation et symboles unicode.
Puisque vous n'avez pas d'espace blanc et de soulignement dans votre classe de caractères, je pense que suivre regex sera mieux pour vous:
Pattern regex = Pattern.compile("[^\w\s]");
Qui signifie correspondre à tout autre que [A-Za-z0-9\s_]
Version Unicode:
Pattern regex = Pattern.compile("[^\p{L}\d\s_]");
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class detectspecial{
public int getSpecialCharacterCount(String s) {
if (s == null || s.trim().isEmpty()) {
System.out.println("Incorrect format of string");
return 0;
}
Pattern p = Pattern.compile("[^A-Za-z0-9]");
Matcher m = p.matcher(s);
// boolean b = m.matches();
boolean b = m.find();
if (b == true)
System.out.println("There is a special character in my string ");
else
System.out.println("There is no special char.");
return 0;
}
}
Essayez:
(?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 tout caractère alphabétique de a
à z
.
[^a-z0-9\\s\\(\\)\\[\\]\\{\\}\\\\^\\$\\|\\?\\*\\+\\.\\<\\>\\-\\=\\!\\_]
: représente tout caractère alphabétique sauf a
à z
, chiffres et caractères spéciaux, c'est-à-dire caractères accentués.
[[a-z][^a-z0-9\\s\\(\\)\\[\\]\\{\\}\\\\^\\$\\|\\?\\*\\+\\.\\<\\>\\-\\=\\!\\_]]
: représente uniquement les caractères alphabétiques(accentués ou non accentués).
*
: une ou plusieurs occurrences de l'expression régulière qui le précède.
Si vous ne comptez que sur les caractères ASCII, vous pouvez compter sur l'utilisation des plages hexadécimales de la table ASCII. Voici une regex qui va saisir tous les caractères spéciaux dans la gamme de 33-47
, 58-64
, 91-96
, 123-126
[\x21-\x2F\x3A-\x40\x5B-\x60\x7B-\x7E]
Cependant, vous pouvez penser à des caractères spéciaux comme Pas caractères normaux. Si nous adoptons cette approche, vous pouvez simplement le faire
^[A-Za-z0-9\s]+
Cependant, ce ne sera pas attraper _
^
et probablement d'autres.
Utilisez ce modèle d'expression régulière ("^[A-zA-Z0-9]*$"). Il valide la chaîne alphanumérique à l'exclusion des caractères spéciaux
Voici ma variante regex d'un caractère spécial:
String regExp = "^[^<>{}\"/|;:.,~!?@#$%^=&*\\]\\\\()\\[¿§«»ω⊙¤°℃℉€¥£¢¡®©0-9_+]*$";
(code Java)
Essayez d'utiliser ceci pour les mêmes choses - StringUtils.isAlphanumeric(value)
(^\W$)
^ - début de la chaîne, \W-correspond à tout caractère non-mot [^A-zA-Z0-9_], $ - fin de la chaîne
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();