【问题标题】:Regex email code not matching. C# visual studio 2010正则表达式电子邮件代码不匹配。 C#视觉工作室2010
【发布时间】:2014-05-30 00:42:51
【问题描述】:

我是 c# 新手,但遇到了一些我无法解决的问题。

情况

我正在使用 Visual Studio 2010 创建一个 Windows 窗体应用程序,该应用程序具有验证电子邮件地址的选项。我查看了有关使用RegularExpressions 的教程,并来到了这里。我觉得我遗漏了一些东西,因为每次我验证时,它只会将MessageBox.Show("Email invalid"); 发送给用户。

代码

private void validateBtn_Click(object sender, EventArgs e)
{
    Regex email = new Regex("^[a-zA-Z0-9]{1-20}@[a-zA-Z0-9]{1-20}.[a-zA-Z]{2-3}$");

    if (!email.IsMatch(emailTxt.Text))
    {
        MessageBox.Show("Email invalid");
    }
    else
        MessageBox.Show("Email Valid");
}

【问题讨论】:

  • 拥有您要验证的文本会有所帮助
  • 您输入的失败的电子邮件地址是什么?您的正则表达式有几个问题。一是.是一个特殊字符,意思是“任何字符”;您将其用作文字,应该像 \. 那样转义(但这不会导致失败。我看到的第二个问题是它不会处理像 one@two.three.com 这样的地址。但是请给我们您的意见,以便我们更好地提供帮助.
  • 任何尝试use a regular expression to validate an email address的人的必填链接。

标签: c# regex visual-studio-2010 visual-studio email-validation


【解决方案1】:

通常我不会使用Exception 来指导这样的程序逻辑,但在验证电子邮件时,我发现使用内置 .NET 功能比尝试使用use Regex to validate an email address 更可靠和可读。

using (var mm = new MailMessage())
{
    try
    {
        mm.To.Add(emailTxt.Text);
        MessageBox.Show("Email Valid");

        ... rest of your code to send the email
    }
    catch (FormatException)
    {
        MessageBox.Show("Email Invalid");
    }
}

或者,只测试地址:

try
{
    var mail = new MailAddress(emailTxt.Text);
    MessageBox.Show("Email Valid");
}
catch (FormatException)
{
    MessageBox.Show("Email Invalid");
}

这个类并不完美,你可以找到一些帖子表明它不能捕捉到所有的边缘情况。

但是当this is the alternative,我想我宁愿坚持上面的,抓住机会。

【讨论】:

    【解决方案2】:

    .是特殊字符,使用

    Regex email = new Regex(@"^[a-zA-Z0-9]{1-20}@[a-zA-Z0-9]{1-20}\.[a-zA-Z]{2-3}$");
    

    请注意,我在字符串前面添加了一个'@',以避免转义'\'

    【讨论】:

    • 这可能不是问题的根本原因(我们无法确定 OP 的输入数据),因为 . 特殊字符实际上会匹配 . 文字并且不会不会导致失败。
    【解决方案3】:

    您的正则表达式中有两个语法错误:

    . 代表随机符号,因此必须用反斜杠转义:\.

    {1-20} 必须用逗号书写:{1,20}

    [a-zA-Z0-9]{1,20}@[a-zA-Z0-9]{1,20}\.[a-zA-Z]{2,3} 
    

    有效。

    如果你使用 C#,你必须在第一个 " 之前加上一个 @ 来表示它不应该在字符串中使用反斜杠来转义。搜索正则表达式时应该这样做。

    @"[a-zA-Z0-9]{1,20}@[a-zA-Z0-9]{1,20}\.[a-zA-Z]{2,3} "
    

    【讨论】:

    • 谢谢,我用这个更新了我的代码,它可以工作了! :)
    猜你喜欢
    • 2016-04-26
    • 2013-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多