2012-11-13 13 views
12

Mam problemy z tworzeniem walidatora wyrażeń regularnych, który sprawdza, czy dane wejściowe zawierają tylko małe litery alfabetu, spacje, kropki, podkreślenia i myślniki. Nie można znaleźć tego przykładu online w wynikach wyszukiwania. Na przykład:Co to jest wyrażenie regularne zezwalające tylko na wielkie/małe litery (znaki alfabetyczne), kropki, spacje i myślniki?

Są ok:

Dr. Marshall 
sam smith 
.george con-stanza .great 
peter. 
josh_stinson 
smith _.gorne 

Wszystko zawierający inne postacie nie jest w porządku. To liczby lub dowolne inne symbole.

Odpowiedz

45

regex szukasz jest ^[A-Za-z.\s_-]+$

  • ^ twierdzi, że wyrażenie regularne musi pasować na początku tematu
  • [] to klasa postaci - dowolny znak, który pasuje do wnętrza to wyrażenie jest dozwolone
  • A-Z zezwala na wybór wielkich liter
  • a-z zezwala na wprowadzanie małych liter
  • . odpowiada okres zamiast szeregu znaków
  • \s tenis odstępu (spacje i zakładek)
  • _ dopasowuje podkreślenia
  • - odpowiada myślnik (myślnik); mamy go jako ostatnią postać w klasie postaci, więc nie zostanie zinterpretowany jako część zakresu znaków. Mogliśmy również uciec (\-) zamiast i umieścić go w dowolnym miejscu w klasie znaków, ale to jest mniej jasne
  • + twierdzi, że wyrażenie poprzedzające (w naszym przypadku, klasa znaków) musi pasować jeden lub więcej razy
  • $ Wreszcie, twierdzi, że jesteśmy teraz na końcu tematu

Podczas testowania wyrażeń regularnych, będziesz prawdopodobnie znaleźć narzędzia takie jak regexpal pomocny. Dzięki temu możesz zobaczyć, jak twoje regularne wyrażenie pasuje (lub nie pasuje do) do przykładowych danych w czasie rzeczywistym podczas pisania.

+0

'.-_' Oznacza '\ x2e- \ x5f', I.E zakres taki jak' a-z' – Esailija

+0

@ m.buettner dobry połów, dzięki! – Kelvin

+1

również, jeśli chcesz wyjaśnić element wyrównywany element po elemencie, powinieneś raczej użyć w wyrażeniu regularnym wyrażenia "free-spacing mode" (http://www.regular-expressions.info/freespacing.html) i '# '. jest bardziej czytelny i można go skopiować do kodu OP wraz ze wszystkimi komentarzami. –

2

Zobacz podstawy wyrażeń regularnych w a tutorial. Trzeba tylko dwa anchors i repeatedcharacter class:

^[a-zA-Z ._-]*$ 

Jeśli używasz bez uwzględniania wielkości liter modyfikator, można skrócić to do

^[a-z ._-]*$ 

Należy pamiętać, że przestrzeń jest znacząca (jest to tylko charakter jak każdy inny).

+2

To ogranicza to do ASCII! Generalnie potrzebujesz czegoś takiego jak '^ [\ p {Upper} \ p {Lower} ._-] * $' lub '^ [\ p {Letter} ._-] * $'. – MRAB

+2

@MRAB ogólnie tak, ale nie jest to obsługiwane przez wszystkie smaki regex (i nie znamy smaku używanego przez OP). plus, może nawet nie obsługiwać wejścia Unicode. i na koniec, OP powinien najpierw nauczyć się podstaw regex, zanim zacznie myśleć o właściwościach unicode. –

Powiązane problemy