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

时间:2014-01-14 20:55:23

标签: c# winforms

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

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

有没有办法通过代码,或者使用MaskedTextbox中的Mask进行此操作?

6 个答案:

答案 0 :(得分:11)

不要打扰正则表达式。 It's a Bad Idea.

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

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

答案 1 :(得分:2)

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

@"\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{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])?"

答案 2 :(得分:2)

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

using System.ComponentModel.DataAnnotations;

public class TestModel{
    [EmailAddress]
    public string Email { get; set; }
}

答案 3 :(得分:1)

请参阅:如何:Verify that Strings Are in Valid Email Format - 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}))$"

(来自同一source

答案 4 :(得分:1)

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

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

答案 5 :(得分:0)

我建议您使用Regular Expression之类的:

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

验证文本框的输入。

示例代码:

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