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!");
    }
31
demandé sur Piotr Sagalara 2013-08-05 16:18:14

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-2

Essayez un négatif match:

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

(cela va ok seulement A-z "standard" lettres et "standard" chiffres.

100
répondu xanatos 2015-10-02 12:05:25

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:

[$&+,:;=?@#|'<>.^*()%!-]
16
répondu Jerry 2013-08-05 12:22:02

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:

entrez la description de l'image ici

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.

14
répondu Sina Iravanian 2013-08-05 12:31:34

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_]");
6
répondu anubhava 2013-08-05 12:27:07
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;
 }
}
3
répondu Ashish Sharma 2014-06-26 08:23:25

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.

3
répondu cdaiga 2016-02-17 18:42:15

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.

2
répondu Serguei Fedorov 2016-02-17 18:40:52

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

2
répondu sam 2016-07-04 06:41:26

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

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

(code Java)

2
répondu Chack 2017-03-20 14:52:35

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

1
répondu Ash 2016-12-07 23:54:03

(^\W$)

^ - début de la chaîne, \W-correspond à tout caractère non-mot [^A-zA-Z0-9_], $ - fin de la chaîne

0
répondu Sareesh Krishnan 2016-08-26 09:18:37

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
répondu KayV 2018-09-20 12:18:17