Проверить валидность e-mail
Валидность — это проверка чего-либо (в данном случае введенного e-mail) на правильность, корректность. Т.е. e-mail должен быть обязательно с символом «@», слева от которого и справа что-то написано. Также справа должна быть указана доменная зона, например, «.ru».
Часто пользователю необходимо указать свой e-mail, например, при регистрации на сайте. И вполне разумно сделать так, чтобы пользователь не мог указать другую информацию, не являющуюся e-mail.
Для такого рода проверок в ASP.NET существует ряд специальных элементов управления, расположенных в секции «Validation».
Регулярное выражение для E-Mail
Для проверки валидности e-mail мы будем использовать регулярное выражение.
В Википедии написано, что регулярные выражения — система синтаксического разбора текстовых фрагментов по формализованному шаблону, основанная на системе записи образцов для поиска.
Регулярное выражение для e-mail выглядит следующим образом:
[\w\d-\.]+@([\w\d-]+(\.[\w\-]+)+)
Да, для тех, кто не знаком с регулярными выражениями, это может показаться набором символов, но это работает. Подробнее о регулярных выражениях рекомендую прочитать в Википедии.
Подготовка формы
Нам понадобятся следующие компоненты:
1. Поле для ввода — TextBox;
2. Валидатор RegularExpressionValidator.
3. Label, который будет перед TextBox для пояснения, что же в поле нужно написать пользователю, но это совсем не обязательно (это только в качестве обучения)
С первым и третьим пунктами сложностей возникнуть не должно, изменить текст в Label на «e-mail» не проблема.
RegularExpressionValidator — это элемент управления, который проверяет, соответствует ли значение связанного элемента управления вводом образцу, заданному регулярным выражением.
RegularExpressionValidator должен находиться в месте формы, где будет выводиться сообщение об ошибке, и обязательно должен быть помещен внутрь тега формы с параметром runat=server.
Немного отойду от основной темы статьи и посоветую сервис нагрузочного тестирования doLoadTest. После завершения разработки проекта не помешает выполнить нагрузочное тестирование и возможно что-то оптимизировать.
Настройка RegularExpressionValidator
Свойство ErrorMessage можете отредактировать по своему усмотрению, это текст который будет выводиться на месте контрола в случае некорректного ввода. Я написал «Поле e-mail заполнено не верно».
Теперь нужно указать элемент управления с которым связан RegularExpressionValidator. Т.е. из какого элемента управления будет браться текст и проверяться по регулярному выражению. В нашем случае нужно указать (если вы не меняли ID контрола TextBox):
ControlToValidate="TextBox1"
Далее нужно указать то самое регулярное выражение, которое я написал в самом начале:
ValidationExpression="[\w\d-\.]+@([\w\d-]+(\.[\w\-]+)+)"
Ну и последнее, что нужно сделать это:
Display="Dynamic"
Свойство Display получает или задает поведение при отображении сообщения об ошибке в элементе управления проверки. Если установить свойство равным Dynamic, то проверка будет осуществляться после того, как компонент потеряет фокус.
Код элементов управления
Вот так выглядит код у меня:
<asp:Label ID="Label1" runat="server" Text="email: " /> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ErrorMessage="Поле e-mail заполнено не верно" ControlToValidate="TextBox1" ValidationExpression="[\w\d-\.]+@([\w\d-]+(\.[\w\-]+)+)" Display="Dynamic"> </asp:RegularExpressionValidator>
Вот вобщем то и все. Запускаем и пробуем.
А если в TextBox ничего не написать?
Иногда это допускается, а иногда нет, например, в случае если разработчик решил, что e-mail должен быть обязательно введен.
Если ничего в текстовое поле не вводить, то RegularExpressionValidator просто «промолчит».
Как всегда в программировании, решение данной проблемы можно реализовать по разному. Можно в обработчике кнопки проверить TextBox, и сообщить пользователю, что поле обязательное для ввода. Но есть вариант значительно проще — элемент управления RequiredFieldValidator.
RequiredFieldValidator превращает связанный элемент управления в обязательное поле. Т. е. связанное с ним поле TextBox должно быть обязательно заполнено.