Проверка электронной почты с регулярным выражением VB.Net

Я работаю над небольшим проектом в 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

Ответ 1

Используйте класс 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? Если регулярное выражение является наиболее подходящим местом для этого теста или должно иметь отдельный код для этой проверки? Даже выражение в этом ответе теперь очень устарело, поскольку оно было первоначально автором. Я рекомендую найти ресурс, который вы можете использовать для выражения, которое, как вы знаете, будет поддерживаться.

Ответ 2

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

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

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

Ответ 3

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

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

Ответ 4

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

try
{
   MailAddress email = new MailAddress(txtEmail.Text);
}
catch(FormatException fe)
{
   // output error
}

Ответ 5

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

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

Ответ 6

Адрес электронной почты: 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