2009-07-06 13 views
5

Chcę sprawdzić poprawność łańcucha zawierającego tylko liczby. Łatwa weryfikacja? Dodałem funkcję RegularExpressionValidator z ValidationExpression = "/ d +".Funkcja RegularExpressionValidator nie wyzwala wpisu w przestrzeni białej

Wygląda dobrze - ale nic nie zostało sprawdzone, gdy wprowadzono tylko spację! Nawet wiele spacji zostało zatwierdzonych w porządku. Nie potrzebuję tego jako obowiązkowego.

Mogę przyciąć na serwerze, ale nie mogę zrobić regularnego wyrażenia zrobić wszystko!

Odpowiedz

11

Jest to zgodne z projektem i ma tendencję do odrzucania wielu osób. Parametr RegularExpressionValidator nie powoduje, że pole jest obowiązkowe i pozwala je pozostawić puste i akceptuje białe znaki. Format \ d + jest poprawny. Nawet użycie^\ d + $ spowoduje ten sam problem z dopuszczeniem białych znaków. Jedynym sposobem na wymuszenie tego, aby uniemożliwić białe znaki, jest także użycie RequiredFieldValidator do działania na tej samej kontrolce.

Jest za tym RegularExpressionValidator documentation, który stanowi:

Validation powiedzie, jeśli kontrola wprowadzania jest pusty. Jeśli wymagana jest wartość wymagana dla skojarzonego sterowania wejściowego , należy użyć kontrolki RequiredFieldValidator oprócz kontrolki RegularExpressionValidator .

Sprawdzanie wyrażeń regularnych pola w kodzie źródłowym działa zgodnie z oczekiwaniami; jest to tylko problem z funkcją RegularExpressionValidator. Możesz więc użyć CustomValidatora zamiast tego i powiedzieć args.IsValid = Regex.IsMatch(txtInput.Text, @"^\d+$"), a jeśli zawiera on białe spacje, to zwróci false. Ale jeśli tak jest, dlaczego nie wystarczy użyć RequiredFieldValidator w dokumentacji i uniknąć pisania niestandardowego kodu? Również parametr CustomValidator oznacza obowiązkowy odświeżenie (chyba że podasz skrypt sprawdzania poprawności klienta z odpowiednikiem regex javascript).

+1

wszystkie białe spacje są uważane za puste? wygląda na wykończenie na serwerze jest odpowiedzią. –

+0

Tak, pozostawiając puste miejsce lub dodając białe znaki. Po wprowadzeniu znaku aktywator uruchomi się, więc wpisanie "10" jest poprawne. Możesz zachować ją taką, jaka jest, wiedząc, że cokolwiek ją pokona, będzie prawidłową liczbą lub białymi znakami. W każdym razie zmniejsz swoją wartość. –

+1

dzięki Ahmad. Żałuję, że dokumenty MSDN nie powiedzieliby "wszystkie spacje są puste"! –

1

Twoje pytanie jest trochę trudne do naśladowania, ale jeśli pytasz, jak napisać wyrażenie regularne, które tylko akceptuje cyfry Myślę, że twoim błędem jest użycie ukośnika w przód zamiast ukośnika odwrotnego. Spróbuj

"\d+"

+0

tak, próbowałem. pozwól mi spróbować wyjaśnić. wprowadzenie do pola tekstowego: "55" - ważne. "55x" - zawiedzie (jest to dobre). "" - ważna! (nie zbyt dobrze!) –

+0

OK, w twoim przykładzie powiedziałeś, że użyłeś "/ d +", który jest bardzo inny niż "\ d +" w regex. Czy próbowałeś również dodać RequiredFieldValidator? To może zapobiec "" prawnemu. Nie w 100% pozytywne, nie twierdzę, że jestem ekspertem asp.net;) – Scanningcrew

0

Spróbuj użyć^\ d + $ zmusić cyfry, aby wypełnić całą linię. ^ = początek linii $ = koniec linii

+0

IIRC, wartości^i $ są niejawne podczas używania walidatora Regex. – Cerebrus

+0

"Sam to" założyłem, ale zostałem ukąszony przez nieoczekiwane mecze w przeszłości. Och, czekaj, to waas czystego REGEX. Nie jesteś pewien co do walidatora. –

1

Funkcja RegularExpressionValidator jest ładnym opakowaniem do sprawdzania regex, ale nie sprawdza poprawności wobec pustego formantu. Można użyć CustomValidator, a następnie wykonać sprawdzanie wyrażeń regularnych w funkcji javascript, która zostanie dołączona do walidatora.

Będzie sprawdzać poprawność wobec pustego (pustego) formantu, o ile ustawisz właściwość ValidateEmptyText na wartość true.

Możesz przeczytać więcej o CustomValidators na MSDN here.

+0

Aby dodać do tego, że skrypt klienta może być używany z CustomValidator, dobrze byłoby również włączyć walidację po stronie serwera, aby objąć wszystkie bazy. –

Powiązane problemy