2010-03-16 4 views
0

мне нужно убедиться, что входное значение содержит, по меньшей мере, одну точку, так что я использовал следующее:Backslash побега в RegularExpressionValidator

<asp:RegularExpressionValidator runat="server" 
ControlToValidate="MyInput" Text="*" 
ErrorMessage="must contain at least one dot" 
ValidationExpression="\.+" /> 

И это не работает. Изучив исходный код страницы, я вижу, что ASP.NET избегает символа обратной косой черты, поэтому в java-скрипте он выглядит как "\\.+". Почему он это делает и как я могу предотвратить использование функции RegularExpressionValidator?

ответ

1

Если вы хотите проверить, содержит ли вход хотя бы одну точку, ваше выражение неверно. Он соответствует только входным данным, состоящим только из точек.

Вы должны использовать

.*\..* 

Если маскирование оказывается проблема, тоже использовать [.] вместо \..

Обратите внимание, что RegularExpressionValidator не проверяет пустые поля. Для этого используйте RequiredFieldValidator.

+0

Вы уверены, что 'RegularExpressionValidator' неявно ищет начало и конец строки? AFAIK это * не *, поэтому '\ .' должен быть достаточным шаблоном. –

+0

Я только что протестировал его. Оно делает. По крайней мере, тот, который я использую здесь, на своем веб-сайте. – Jens

+0

Спасибо! Это означает, что параметры по умолчанию JS по умолчанию отличаются от класса .NET Regex, потому что последнее работает нормально. Это странно - если мы отключили JS, то RegularExpressionValidator должен использовать проверку на стороне сервера (т. Е. Класс Regex), не так ли? – UserControl

1

Двойной escape необходим, потому что обратная косая черта используется для escape-последовательностей как в JavaScript, так и в регулярных выражениях. Быстрый тест, чтобы проиллюстрировать этот момент:

alert('42'.match("\d"));  // no match 
alert('42'.match("\\d")); // match 

Но это не решит вашу проблему. Первый шаг в troubeshooting: измените выражение проверки на a. Разве это не терпит неудачу на «foo» и переходит на «бар»? Если нет, что-то еще не так на вашей странице - возможно, ошибка JavaScript, связанная с ошибкой, приводит к пропуску кода проверки.

Немного от темы: Ваши выражения проверки могут быть обрезаны до \. (без плюса), так как вы действительно заботитесь только о согласовании одной точки.

+0

Одиночная обратная косая черта также работает: 'alert ('12 .3'.match (" \. "));' – UserControl

+0

@frogbot: Вы правы. Я обновил с лучшим образцом. –