Проверить валидность e-mail

Дата: 12.12.2009
Категории: ASP.NET Visual Studio (C#)

Валидность — это проверка чего-либо (в данном случае введенного e-mail) на правильность, корректность. Т.е. e-mail должен быть обязательно с символом «@», слева от которого и справа что-то написано. Также справа должна быть указана доменная зона, например, «.ru».

Часто пользователю необходимо указать свой e-mail, например, при регистрации на сайте. И вполне разумно сделать так, чтобы пользователь не мог указать другую информацию, не являющуюся 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 должно быть обязательно заполнено.

Коментарии:

  1. 02.09.2011 в 19:52

    Вы мне очень помогли, Спасибо Вам.
    А как вместо сообщения об ошибке выводить картинку?

  2. 02.09.2011 в 20:10

    И еще один вопрос, как вывести сообщение если поле заполнено верно?

  3. 22.05.2012 в 01:49

    у меня такие фишки не работают в firefox, не знаете как это полечить для браузеров не IE?