检查文本框中的输入是否是电子邮件
我正在尝试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
。