2009-10-23 10 views
7

Wygląda na to proste zadanie - dostać regex, który sprawdza ciąg dla konkretnej długości. ^ {1500} $Regex ograniczyć długość ciągu ciągów z nowymi postaciami linii

Ale jeśli ciąg ma „\ r \ n "niż powyższy mecz zawsze kończy się niepowodzeniem!

Jak powinno wyglądać prawidłowe wyrażenie regularne, aby akceptować nowe znaki linii jako część ciągu?

Mam <asp:TextBox TextMode="Multiline"> i używać RegularExpressionValidator sprawdzić długość typów użytkowników, co w.

Dziękuję Andrey

Odpowiedz

12

Podczas sprawdzania poprawności danych wejściowych można użyć opcji RegexOptions.Singleline. Traktuje dane wejściowe jako pojedyncze wyrażenie liniowe i analizuje je jako takie.

inaczej może dać następujące wyrażenie spróbować:

^(.|\s){1,500}$ 

to powinno działać w wejściach multilinii.

+0

Czy możesz wymienić wspornik zamykający na nawias klamrowy; w przeciwnym razie zadziałało, dzięki! – Andrey

+0

Naprawiono literówkę :-) –

+0

Wznawiane, ale osoby używające tego do sprawdzania poprawności powinny uważać, że technicznie można obejść to na przykład 500 [ENTER]. – AmmarCSE

0

można rozebrać te podziały wiersza przed sprawdzeniem długości łańcucha? Byłoby to łatwe do zrobienia podczas sprawdzania poprawności po stronie serwera. (W .net można użyć do tego celu niestandardowego walidatora)

Z perspektywy UX, zaimplementowałem również "licznik znaków" po stronie klienta. Można znaleźć wiele. jQuery ma kilka opcji. Następnie możesz zaimplementować niestandardowy weryfikator tak, aby działał tylko po stronie serwera, a następnie używał licznika znaków jako sprawdzania poprawności po stronie klienta. O wiele lepiej dla użytkownika, aby zobaczyć, ile znaków pozostało PODCZAS wpisywania.

+0

Używam funkcji RegularExpressionValidator asp.net, działa ona zarówno po stronie klienta, jak i po stronie serwera, używając regex – Andrey

+0

. Moja sugestia polega na używaniu strony serwera tylko REGEX (wyłączanie strony klienta dla tej kontroli), ponieważ jest to naprawdę tylko do sprawdzania poprawności danych wchodzenie do DB. Po stronie klienta, zamiast sprawdzania go po fakcie, sugerowałbym "licznik znaków" na żywo, ponieważ jest to o wiele lepszy wskaźnik z punktu widzenia użytkownika. To naprawdę ma sens tylko wtedy, gdy już używasz jQuery lub czegoś, co łatwo byłoby dodać. Jeśli nie, może nie warto tego tylko dla tego jednego pola. –

+0

er, pozwól mi przeformułować ... jeśli błąd REGEX nadal występuje, sprawdź po stronie serwera, używając niestandardowego formantu. Możesz po prostu sprawdzić długość łańcucha w łatwy sposób po stronie serwera i zapomnieć o REGEX. Następnie użyj metody javascript na żywo, licząc po stronie klienta. –

0

Niemożliwość ustawienia RegexOptions jest tutaj przykręceniem. Ponieważ jest to funkcja RegularExpressionValidator, możesz spróbować ustawić opcje w samym wyrażeniu regularnym.

myślę, że to powinno działać:

(?s)^.{1,500}$ 

część włącza się opcją SingleLine który pozwoli kropka, aby dopasować każdy znak w tym linia zasila (s?). O ile warto, i notacja potrzebne do ustawienia ich jako instrukcji śródliniowej.

+0

+1 dobra sugestia. Przy okazji, fajna strona (RegexHero.net) :) –

+0

Dzięki człowieku. Próbuję.;) –

+0

To wyrażenie łamie się po stronie klienta sprawdzanie poprawności - JavaScript nie rozumie (? S) – Andrey

Powiązane problemy