2013-04-25 15 views

Odpowiedz

18

Tak, nie potrzebujesz zagnieżdżonego [] w ten sposób. Użyj tego:

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

To wszystko jedna klasa postaci.

+0

ahh oczywiście, musi być późno lol – Tommy

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

Prawie dobrze. Co chcesz to:

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

Oto dobry tutorial

6

Jeśli chcesz dopasować niczego oprócz liter, należy zajrzeć do Unicode properties.

\p{L} jest każdy rodzaj pisma z dowolnego języka

Korzystanie z wielkiej litery „P”, a nie jest to negacja, więc \P{L} będzie pasować do wszystkiego, co nie jest literą.

\d lub \p{Nd} jest dopasowanie cyfry

Więc wyrażenie w nowoczesnym stylu Unicode wyglądałby następująco

albo za pomocą zanegowane klasa znaków

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

lub negowane właściwości

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

Następną sprawą jest, że matches() dopasowuje wyrażenie do całego łańcucha, więc wyrażenie jest prawdziwe tylko z dokładnie jednym znakiem w ciągu znaków. Więc trzeba by dodać kwantyfikator:

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

zwraca true, gdy kompletny ciąg ma tylko non znaki alfanumeryczne oraz co najmniej jeden z nich.

0

Powiedzmy, że chcesz się upewnić, że żaden ciąg znaków nie ma w nich symbolu _, to po prostu użyjesz czegoś takiego.

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