电子邮件地址输入验证

Email address input validation

有没有办法在 wpf C# 中对电子邮件地址进行文本框输入验证?正则表达式或验证表达式或任何可以提供帮助的东西,最好是代码示例和一些说明

在 text_changed 事件中,您可以将文本框的值传递给助手 class。

public static class ValidatorExtensions
{
    public static bool IsValidEmailAddress(this string s)
    {
        Regex regex = new Regex(@"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$");
        return regex.IsMatch(s);
    }
}

现在您可以在文本更改事件中测试输入

private void myTextBox_TextChanged(object sender, EventArgs e)
{
   bool result = ValidatorExtensions.IsValidEmailAddress( myTextBox.Text );
}

有几种方法可以检查电子邮件地址是否有效

About System.Net.Mail.MailAddress
About 正则表达式

 static void Main(string[] args)
        {
            var validMail = "validMail@gmail.com";
            var invalidMail = "123";
            Console.WriteLine("IsValidMailAddress1 Test");
            Console.WriteLine(string.Format("Mail Address : {0} . is valid : {1}", validMail, IsValidMailAddress1(validMail)));
            Console.WriteLine(string.Format("Mail Address : {0} . is valid : {1}", invalidMail, IsValidMailAddress1(invalidMail)));

            Console.WriteLine("IsValidMailAddress2 Test");
            Console.WriteLine(string.Format("Mail Address : {0} . is valid : {1}", validMail, IsValidMailAddress2(validMail)));
            Console.WriteLine(string.Format("Mail Address : {0} . is valid : {1}", invalidMail, IsValidMailAddress2(invalidMail)));

        }


        static bool IsValidMailAddress1(string mail)
        {
            try
            {
                System.Net.Mail.MailAddress mailAddress = new System.Net.Mail.MailAddress(mail);

                return true;
            }
            catch
            {
                return false;
            }
        }

        static bool IsValidMailAddress2(string mailAddress)
        {
            return Regex.IsMatch(mailAddress, @"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$");
        }

这是我找到的最好的:

Regex.IsMatch(emailAddress, @"\A(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)\Z", RegexOptions.IgnoreCase)

实际上,验证电子邮件地址时必须考虑很多事情:

  • 网上找到的Regex表达式几乎都不是100% 正确

  • 即使正则表达式做得 100% 完美,电子邮件客户端也喜欢 Outlook 或电子邮件服务器(如 Exchange)可能不接受异国情调的, 但电子邮件地址有效。

只是一个奇怪但有效的电子邮件地址的例子:

"very.(),:;<>[]\".VERY.\"very@\ \"very\".unusual"@strange.example.com

属于以下类型:

John.Doe@example.com

但实际上,RFC 5322:Internet 消息格式:地址规范指定电子邮件地址如下所示:

John Doe<John.Doe@example.com>

第一个"John Doe"是显示名称。

如果添加显示名称验证,它会变得相当复杂。但即使没有显示名称,大多数正则表达式也无法将以下电子邮件地址识别为有效地址: "John@Doe"@example.com

因此,建议只是在电子邮件地址看起来很奇怪时警告用户,但让用户决定他是否打错了字或他是否真的想输入该电子邮件地址。

除了验证之外,当用户只能键入合法字符时可能会有所帮助。

阅读我的文章 CodeProject: Email Address Validation Explained,它附带了一个完全实现和测试的 WPF 电子邮件文本框的代码。