2013-04-25 16 views

risposta

18

Sì, non è necessario nidificato [] simile. Utilizza invece:

"[^A-Za-z0-9]" 

È tutta una classe di caratteri.

+0

ahh ovviamente, si deve arrivare tardi lol – Tommy

1
string.matches("[^A-Za-z0-9]") 
1

Quasi a destra. Quello che vuoi è:

string.matches("[^A-Za-z0-9]") 

Ecco un buon tutorial

6

Se si desidera far corrispondere nulla, ma le lettere, si dovrebbe avere uno sguardo Unicode properties.

\p{L} è alcun tipo di lettera da qualsiasi lingua

L'utilizzo di un maiuscola "P" invece è la negazione, in modo \P{L} sarebbe partita tutto ciò che non è una lettera.

\d o \p{Nd} è la corrispondenza cifre

Quindi la tua espressione in moderno stile Unicode sarebbe simile a questa

O utilizzando una classe di caratteri negata

[^\p{L}\p{Nd}] 

o negati proprietà

[\P{L}\P{Nd}] 

La prossima cosa, matches() corrisponde all'espressione sulla stringa completa, quindi l'espressione è vera solo con esattamente un carattere nella stringa. Così si avrebbe bisogno di aggiungere un quantificatore:

string.matches("[^\p{L}\p{Nd}]+") 

restituisce vero, quando la stringa completa non ha solo caratteri alfanumerici e almeno uno di essi.

0

Diciamo che volete assicurarvi che nessuna stringa abbia il simbolo _ in esse, quindi usereste semplicemente qualcosa come questo.

Pattern pattern = Pattern.compile("_"); 
    Matcher matcher = Pattern.matcher(stringName); 
    if(!matcher.find()){ 
     System.out.println("Valid String"); 
    }else{ 
     System.out.println("Invalid String"); 
    } 
Problemi correlati