2014-05-07 11 views
2

J'ai cette méthode pour vérifier si une chaîne contient un caractère spécial, mais je ne veux pas qu'il vérifie des caractères spécifiques tels que (+ ou -) comment j'irais faire cela?Ignorer les caractères spécifiques dans regex

public boolean containsSpecialCharacters(String teamName) {  
    Pattern p = Pattern.compile("[^a-z0-9 ]", Pattern.CASE_INSENSITIVE); 
    Matcher m = p.matcher(teamName); 

    boolean b = m.find(); 
    if (b) { 
     return true; 
    } 

    return false; 
} 
+1

il suffit de mettre dans la classe de caractères. Faites attention quand vous placez le '-'. De préférence, vous le mettrez à la fin. – Jerry

+1

Non lié, mais juste 'return b;' à la place. –

+2

Ajoutez simplement ceux-ci à votre classe de personnage annulée. '[^ - + a-z0-9]' Notez également que si vous placez le trait d'union comme premier caractère comme indiqué (ou dernier), il n'a pas besoin d'être échappé, ce qui simplifie grandement votre code lors de la compilation à partir d'une chaîne . –

Répondre

0

Vous pouvez essayer ceci:

[^\w +-] 

REGEX EXPLICATION

[^\w +-] 

Match a single character NOT present in the list below «[^\w +-]» 
    A word character (letters, digits, and underscores) «\w» 
    The character “ ” « » 
    The character “+” «+» 
    The character “-” «-» 
+1

'\ w' contient également' _', donc vous négationnez ici aussi. – hwnd

1

Vous pouvez utiliser ce qui suit. Ajoutez simplement ces caractères à l'intérieur de votre classe de caractères annulée.

Au sein d'une classe de caractères [], vous pouvez placer un tiret (-) en tant que premier ou dernier caractère. Si vous placez le trait d'union à un autre endroit, vous devez l'échapper (\-) pour pouvoir l'apparier.

Pattern p = Pattern.compile("(?i)[^a-z0-9 +-]"); 

Expression régulière:

(?i)   # set flags for this block (case-insensitive) 
[^a-z0-9+-]  # any character except: 'a' to 'z', '0' to '9', ' ', '+', '-' 
Questions connexes