Является ли Regex стабильным для проверки электронной почты в отличие от класса mailAddress?
У меня есть эта функция, которая прекрасно работает, однако есть и более простой способ выполнить проверку проверки с использованием класса почтового адреса, и будет ли он более подходящим. Заранее спасибо.
TextBox tb = new TextBox();
tb.KeyDown += new KeyEventHandler(txtEmail_KeyDown);
string strRegex = @"^(?("")("".+?(?<!\\)""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))" + @"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9][\-a-z0-9]{0,22}[a-z0-9]))";
Regex re = new Regex(strRegex); // New regex Object created
// Run Checks after the enter is pressed.
if (e.KeyCode == (Keys.Enter))
{
// checks for is match, if empty and length
if (!re.IsMatch(txtEmail.Text) || (txtEmail.Text.Equals("")) || txtEmail.Text.Length > 100)
{
// display messagebox with error
MessageBox.Show("Email not correct format!!!! ");
}
else
{
MessageBox.Show("Email Format is correct");
}
}
}
2 ответа
Вы можете легко проверить с помощью класса EmailAddressAttribute, как это в C#
public bool ValidateEmail(string EmailToVerify)
{
if (new EmailAddressAttribute().IsValid(EmailToVerify))
return true;
else
return false;
}
но чтобы использовать это, вам нужно добавить это, используя в верхней части вашей кодовой страницы C#
using System.ComponentModel.DataAnnotations;
Единственный недостаток этого заключается в том, что EmailAdressAttribute не является настолько разрешающим, поэтому это зависит от того, что вы хотите ограничить и разрешить
И если вам это нужно, вот ссылка на документ MSDN об этом классе: https://msdn.microsoft.com/fr-fr/library/system.componentmodel.dataannotations.emailaddressattribute(v=vs.110).aspx
Нет, это не стабильно. Поскольку любое регулярное выражение представляет собой конечный автомат, в особых случаях оно может попасть в бесконечный цикл, который прививает к атаке DDOS сервера.
Просто используйте класс MailAddress для проверки.
ОБНОВЛЕНИЕ 1
После тестирования MailAddress
класс и new EmailAddressAttribute().IsValid("MAIL_TEXT_HERE")
Я пришел к выводу, что Проверка EmailAddressAttribute работает лучше.
Вы можете реализовать это таким образом, скажем, у вас есть TextBox и Button для отправки. Просто добавьте этот обработчик события Click к кнопкам Click Event:
private void button1_Click(object sender, EventArgs e)
{
if(!new EmailAddressAttribute().IsValid(textBox1.Text))
{
MessageBox.Show("Email is not valid");
}
else
{
MessageBox.Show("Email is valid");
}
}