Проверка электронной почты с регулярным выражением VB.Net - PullRequest
11 голосов
/ 15 декабря 2008

Я работаю над небольшим проектом в VB.Net, где я получаю данные из текстового поля, и мне нужно убедиться, что это адрес электронной почты.

Я нашел это выражение "^ [_ a-z0-9 -] + (. [_ A-z0-9 -] +) @ [a-z0-9 -] + (. [A-z0- 9 -] +) (. [Az] {2,4}) $ ", но я не могу найти способ проверить, прошел ли он.

Мне нужен код вроде:

if not txtEmail.text = regexString then
    something happens..
else
    something else happens..
end if

Ответы [ 6 ]

20 голосов
/ 15 декабря 2008

Используйте класс System.Text.RegularExpressions.Regex:

Function IsEmail(Byval email as string) as boolean
    Static emailExpression As New Regex("^[_a-z0-9-]+(.[a-z0-9-]+)@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,4})$")

    return emailExpression.IsMatch(email)
End Function

Самое важное, что нужно понять в этом ответе, это то, что я сам не писал регулярное выражение. Есть так много неправильных способов, которые кажутся правильными, и есть несколько уровней детализации, к которым вы могли бы обратиться. Например, хотите ли вы ограничить это действительными доменами верхнего уровня, и если да, то как вы учитываете тот факт, что они теперь время от времени добавляют новые TLD? Если регулярное выражение является наиболее подходящим местом для этого теста, или должен иметь отдельный код для этой проверки? Даже выражение в этом ответе теперь очень устарело, так как оно было изначально написано.

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

6 голосов
/ 17 декабря 2008

Выберите ваше любимое регулярное выражение из моей статьи о сопоставлении адресов электронной почты с регулярным выражением и вставьте его в этот код Visual Basic:

If Regex.IsMatch(SubjectString, "regex") Then
    Error = False
Else
    Error = True
End If

Лучшее регулярное выражение для сопоставления с адресом электронной почты - спорная тема, в которую я не хочу вдаваться. В моей статье обсуждаются проблемы, о которых вы должны знать при выборе регулярных выражений. Регулярное выражение в ответе Джоэла Кохорна определенно не очень хорошее.

5 голосов
/ 06 февраля 2009

Возможно не по теме, поскольку это не решение регулярных выражений, но вы можете просто использовать некоторые из встроенных функций .NET 2.0:

try
{
   MailAddress email = new MailAddress(txtEmail.Text);
}
catch(FormatException fe)
{
   // output error
}
5 голосов
/ 15 декабря 2008

Существует отличный веб-сайт для такого рода вещей, http://regexlib.com/. Мало того, что у него есть приложение-тестер, куда вы можете вставить регулярное выражение и проверить его, но также есть библиотека регулярных выражений, которую вы можете Я могу использовать отзывы сообщества об их достоверности и т. д. Я не гуру регулярных выражений, поэтому я прихожу сюда, когда мне нужно быстрое регулярное выражение.

Кроме того, если вы задумываетесь о разработке регулярных выражений самостоятельно, есть отличный инструмент под названием Regex Buddy , который позволит вам создавать и тестировать регулярные выражения на лету, используя простую для понимания интерпретацию английского языка. вашего регулярного выражения.

2 голосов
/ 15 декабря 2008

Это регулярное выражение на самом деле не завершено ... на самом деле ... большинство - нет (посмотрите эту статью или эту ).

Если вы действительно не испытываете боль, регулярное выражение не является правильным способом подтверждения адреса электронной почты.

0 голосов
/ 15 декабря 2008

Адрес электронной почты: RFC 2822 (упрощенный) Соответствует нормальному адресу электронной почты. Не проверяет домен верхнего уровня. Требует, чтобы опция «без учета регистра» была включена.

Dim FoundMatch As Boolean
Try
    FoundMatch = Regex.IsMatch(txtEmail.text, "\A(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)\Z", RegexOptions.IgnoreCase)
Catch ex As ArgumentException
    'Syntax error in the regular expression
End Try

If Not FoundMatch Then
   Error = True
Else
   Error = False
End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...