2011-11-09 14 views

Odpowiedz

9

Wewnątrz [ ... ] symbol jest traktowany specjalnie. (Używać go samodzielnie w tym szczególnym celu na początku swojej wypowiedzi, gdzie trzeba a-z.)

Musisz uciec znak -

[a-zA-Z0-9,.;:\-_'\s] 
      ^

lub umieścić go ostatni (lub pierwszy) w [...] wyrażenie jak

[a-zA-Z0-9,.;:_'\s-] 
       ^

Niektóre zauważa ponadto:

  • Technicznie rzecz biorąc, wszystkie znaki są poprawne w pustym ciągu znaków, dlatego zmieniłbym z + na * w wyrażeniu.

  • String.matches sprawdza pełny ciąg, więc ^ i $ są zbędne.

  • całą metoda może być wirtten jak

    return test.matches("[a-zA-Z0-9,.;:_'\\s-]*"); 
    
+0

Dzięki za wyjaśnienie :) –

+0

Nie ma problemu. Nie ma za co. – aioobe

+0

Ponieważ mamy "a-zA-Z0-9_' jako część klasy znaków, czy nie uprościłoby to użycia' \ w' zamiast ?, tj. "" [\\ w,.;: '\\ s -] * "' – ishnid

1

można umieścić - na początku grupy znaków, tak że nie jest interpretowany jako zakres znaków.

2

- w klasie znaków otoczony po obu stronach jest regex meta znak oznaczający zakres.

Do listy dosłownego - w klasie char można uciec - w klasie char:

if (test.matches("^[a-zA-Z0-9,.;:\\-_'\\s]+$")) 
           ^^^ 

lub umieścić - na koniec klasy char:

if (test.matches("^[a-zA-Z0-9,.;:_'\\s-]+$")) 
            ^

lub umieść - na początku klasy znaków:

if (test.matches("^[-a-zA-Z0-9,.;:_'\\s]+$")) 
        ^
Powiązane problemy