Обратная косая черта, выходящая в RegularExpressionValidator

Мне нужно убедиться, что входное значение содержит хотя бы одну точку, поэтому я использовал следующее:

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

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

2 ответа

Решение

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

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

.*\..*

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

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

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

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

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

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

Другие вопросы по тегам