2009-02-17 13 views
7

Czy ktoś ma wyrażenie regularne, które mogłoby ograniczyć liczbę słów w odpowiedzi? Na przykład, chciałbym użyć go z walidacją jQuery, więc mogę ograniczyć pole tekstowe/tekstowe do 250 słów. Pola będą miały zwykły tekst.Ograniczenie liczby słów w odpowiedzi wyrażeniem regularnym

Zrobiłem trochę Googling, ale żadne z tych, które znalazłem, nie były zbyt dobre. Głównie koncentrowali się na robieniu \ b \ w + \ b, ale miałem problem ze sprawnym działaniem.

+0

może to więcej sensu liczyć znaki - nic nie zatrzymując ludzi z wpisanie i pisania oraz pisanie bez spacji ... to powiedziawszy, odpowiedź VonC wygląda świetnie! –

+0

Co z interpunkcją? Wymagają od użytkowników wpisywania tylko znaków słownych i białych znaków? –

Odpowiedz

8

można spróbować:

^(?:\b\w+\b[\s\r\n]*){1,250}$ 

To byłoby ograniczenie do 250 słów na wielu liniach.

Obawiam się, że Alan początkowa propozycja:

/^\w+(?:\s+\w+){0,249}$/ 

może być przypadek catastrophic backtracking

Kiedy zagnieżdżanie operatorów powtórzeń, aby uzyskać pewność, że istnieje tylko jeden sposób, aby dopasować ten sam mecz

+0

To wydawało się działać w moich testach. Nie jestem pewien, czy ta wersja ma jakieś wady, ale na razie mam to zaakceptować. – Jonathan

+0

To działa dla mnie, chyba że wpisuję ", @ to zwraca false.Możesz powiedzieć mi, co muszę zrobić? Dzięki – iOSAppDev

+0

granice słów @iOSAppDev (http://www.regular-expressions.info/wordboundaries.html) zależą na smaku regex, którego używasz. Jeśli po prostu dodajesz cudzysłowy jako separator w moim oryginalnym wyrażeniu regularnym (np .: '^ (?: \ b \ w + \ b [" \ s \ r \ n] *) {1,250} $ ') nie działa, najlepiej jest spojrzeć na alternatywne rozwiązanie (oznaczające "obok regex"). – VonC

3

Co powiesz na dzielenie tekstu za pomocą wyrażenia regularnego (powiedz "\ s +"), a następnie zliczanie długości wynikowej listy? To byłoby nieco łatwiejsze do odczytania.

0

Oto wyrażenie regularne, którego używam do sprawdzania liczby słów.

(\w*\W*){0,250} 
1

Ten pracował dobrze dla mnie, na przykład, jeśli chcesz limit 6-słowo:

^(?:\w+\W+){0,5}(?:\w+)$ 
Powiązane problemy