Обратная косая черта, выходящая в 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 код проверки будет пропущен.
Немного не по теме: Ваши выражения проверки могут быть сокращены до \.
(без плюса), так как вы действительно заботитесь только о сопоставлении одной точки.