2009-10-30 10 views
111

Próbuję napisać regular expression, który zezwala tylko na pisanie małych liter i do 10 znaków. To, co do tej pory wyglądam, wygląda następująco:Wyrażenie regularne w celu ograniczenia liczby znaków do 10

pattern: /^[a-z]{0,10}+$/ 

To nie działa lub się kompiluje. Miałem jedną pracę, która pozwoli tylko małe litery, który był następujący:

pattern: /^[a-z]+$/ 

Ale muszę ograniczyć liczbę znaków do 10.

+4

Opcja {} i + zrobić to samo (liczenie), dzięki czemu są one zbędne, stąd błąd. – PhiLho

+1

Powinieneś upuścić znak "+" z/^ [a-z] {0,10} + $ /. Powinno to być/^ [az] {0,10} $/ –

+1

Zwróć uwagę, że wzorzec '^ [az] {0,10} + $' kompiluje się w niektórych językach, a niektóre z ważnych to Java, Perl (5.10+) , PHP, Ruby (1.9+). Więcej informacji można znaleźć na [tej stronie] (http://www.regular-expressions.info/possessive.html). – Jerry

Odpowiedz

247

Można użyć nawiasów klamrowych kontrolować liczbę wystąpień. Na przykład, to znaczy od 0 do 10:

/^[a-z]{0,10}$/ 

opcje:

  • {3} dokładnie 3 zdarzeń;
  • {6,} Co najmniej 6 wystąpień;
  • {2,5} 2 do 5 wystąpień.

Zobacz regular expression reference.

Twoje wyrażenie miało znak + po zamkniętym nawiasie klamrowym, stąd błąd.

5

To bardzo zależy od używanego programu. Różne programy (Emacs, vi, sed i Perl) używają nieco innych wyrażeń regularnych. W tym przypadku powiedziałbym, że w pierwszym wzorze należy usunąć ostatnie "+".

8

powinien działać. /^[a-z]{1,10}$/, jeśli chcesz dopasować co najmniej jedną postać, na przykład /^[a-z]+$/.

7

Może być korzystne dodanie chciwego dopasowywania do końca łańcucha, aby można było zaakceptować ciągi> niż 10, a wyrażenie regularne powróci tylko do pierwszych 10 znaków. /^[a-z0-9]{0,10}$?/

2
grep '^[0-9]\{1,16\}' | wc -l 

Daje liczy się z dokładnym meczu liczyć z limitem

Powiązane problemy