我有这个功能正常,但有更简单的方法来完成使用邮件地址类的验证检查,它会更合适。提前谢谢。
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");
}
}
}
答案 0 :(得分:2)
您可以在c#
中非常轻松地使用EmailAddressAttribute类进行验证public bool ValidateEmail(string EmailToVerify)
{
if (new EmailAddressAttribute().IsValid(EmailToVerify))
return true;
else
return false;
}
但要使用此功能,您需要在c#代码页顶部添加使用
using System.ComponentModel.DataAnnotations;
唯一的缺点是EmailAdressAttribute不是那么有效,所以它取决于你想要限制和允许的内容
如果你需要它,那么msdn doc关于这个类的链接: https://msdn.microsoft.com/fr-fr/library/system.componentmodel.dataannotations.emailaddressattribute(v=vs.110).aspx
答案 1 :(得分:0)
不,它不稳定。由于它本身的任何正则表达式都代表一个有限状态机,因此在特殊情况下,它可以进入一个无限循环,移植到服务器的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");
}
}