验证电子邮件地址的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