检查文本框中的输入是否是电子邮件

我正在尝试validationuserinput是否是电子邮件地址(向数据库添加成员)。

当调用validation事件时,用户将在TextBox中输入数据; 我想检查输入是否是有效的电子邮件地址。 因此在字符串中包含至少一个@和一个点(。)。

有没有办法通过代码,或者使用MaskedTextbox中的Mask来实现这一点?

不要打扰正则表达式。 这是一个坏主意。

我通常从不使用exception来控制程序中的流程,但就个人而言,在这种情况下,我更愿意让创建MailAddress类的专家为我工作:

 try { var test = new MailAddress(""); } catch (FormatException ex) { // wrong format for email } 

简单电子邮件匹配的正则表达式:

 @"\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[AZ]{2,4}\b" 

RFC 2822标准电子邮件匹配的正则表达式:

 @"[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?" 

不要使用正则表达式,它错过了很多情况甚至不好笑,而且除了聪明的人之外,我们以前来过这个问题来解决这个问题。

 using System.ComponentModel.DataAnnotations; public class TestModel{ [EmailAddress] public string Email { get; set; } } 

请参阅:如何: validation字符串是否为有效的电子邮件格式 – MSDN

你正在寻找的正则表达式应该是:

 "^(?("")(""[^""]+?""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@)) (?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9]{2,24}))$" 

(来自同一个来源 )

我建议你使用这种方式,它对我来说很好。

  Regex reg = new Regex(@"\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"); if (!reg.IsMatch(txtEmail.Text)) { // Email is not valid } 

我建议您使用正则表达式,如:

 @"[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?" 

validation文本框的输入。

示例代码:

 private void button1_Click(object sender, EventArgs e) { Regex emailRegex = new Regex(@"[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=? ^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+ [a-z0-9](?:[a-z0-9-]*[a-z0-9])?"); if (emailRegex.IsMatch(textBox1.Text)) { MessageBox.Show(textBox1.Text + "matches the expected format.", "Attention"); } } 

编辑:我发现了一个更好,更全面的正则Regex