验证电子邮件地址的C#代码

验证字符串是否为有效的电子邮件地址的最优雅的代码是什么?



这是一个古老的问题,但我在SO上发现的所有答案,包括最近的答案,都与此类似。 但是,在.Net 4.5 / MVC 4中,您可以通过添加来自System.ComponentModel.DataAnnotations的[EmailAddress]注释来将电子邮件地址验证添加到表单,所以我想知道为什么我不能只使用内置的功能。一般网。

这看起来很有效,在我看来相当优雅:

using System.ComponentModel.DataAnnotations;

class ValidateSomeEmails
{
    static void Main(string[] args)
    {
        var foo = new EmailAddressAttribute();
        bool bar;
        bar = foo.IsValid("someone@somewhere.com");         //true
        bar = foo.IsValid("someone@somewhere.co.uk");       //true
        bar = foo.IsValid("someone+tag@somewhere.net");     //true
        bar = foo.IsValid("futureTLD@somewhere.fooo");      //true

        bar = foo.IsValid("fdsa");                          //false
        bar = foo.IsValid("fdsa@");                         //false
        bar = foo.IsValid("fdsa@fdsa");                     //false
        bar = foo.IsValid("fdsa@fdsa.");                    //false

        //one-liner
        if (new EmailAddressAttribute().IsValid("someone@somewhere.com"))
            bar = true;    
    }
}

我从菲尔从#1的答案,并创建了这个类。 像这样调用它: bool isValid = Validator.EmailIsValid(emailString);

这是班级:

using System.Text.RegularExpressions;

public static class Validator
{

    static Regex ValidEmailRegex = CreateValidEmailRegex();

    /// <summary>
    /// Taken from http://haacked.com/archive/2007/08/21/i-knew-how-to-validate-an-email-address-until-i.aspx
    /// </summary>
    /// <returns></returns>
    private static Regex CreateValidEmailRegex()
    {
        string validEmailPattern = @"^(?!.)(""([^""r]|[""r])*""|"
            + @"([-a-z0-9!#$%&'*+/=?^_`{|}~]|(?<!.).)*)(?<!.)"
            + @"@[a-z0-9][w.-]*[a-z0-9].[a-z][a-z.]*[a-z]$";

        return new Regex(validEmailPattern, RegexOptions.IgnoreCase);
    }

    internal static bool EmailIsValid(string emailAddress)
    {
        bool isValid = ValidEmailRegex.IsMatch(emailAddress);

        return isValid;
    }
}
链接地址: http://www.djcxy.com/p/2709.html

上一篇: C# code to validate email address

下一篇: Regexp recognition of email address hard?