C# 根据无效字符验证电子邮件地址

C# 根据无效字符验证电子邮件地址,c#,asp.net,.net,email,email-validation,C#,Asp.net,.net,Email,Email Validation,在验证电子邮件地址时,我尝试使用System.ComponentModel.DataAnnotations中的两个类: [EmailAddress(ErrorMessage = "Invalid Email Address")] public string Email { get; set; } 并通过执行以下操作从System.Net.Mail创建该类: bool IsValidEmail(string email) { try { var addr = new Sy

在验证电子邮件地址时,我尝试使用
System.ComponentModel.DataAnnotations中的两个类:

[EmailAddress(ErrorMessage = "Invalid Email Address")]
public string Email { get; set; }
并通过执行以下操作从
System.Net.Mail
创建该类:

bool IsValidEmail(string email)
{
    try {
        var addr = new System.Net.Mail.MailAddress(email);
        return addr.Address == email;
    }
    catch {
        return false;
    }
}
如中所述。这两种方法原则上都有效,它们捕获无效的电子邮件地址,例如,
user@
,不符合格式
user@host


我的问题是,这两种方法都无法检测用户字段中的无效字符,例如
æ、ô或å(例如å)ge@gmail.com)
。这些字符没有返回验证错误有什么原因吗?对于如何在用户字段中包含无效字符的验证,有没有人有一个优雅的解决方案

这些字符不是无效的。不寻常,但并非无效。你链接的问题甚至包含了一个解释,为什么你不应该在意

在全世界充分使用电子邮件需要: (受其他限制)人们能够使用相近的变化 用自己的名字(用自己的语言正确书写)和 脚本)作为电子邮件地址中的邮箱名称


-,2012

您提到的字符(
ø、å或å)ge@gmail.com
)不是无效的。举个例子:当有人使用外语作为他们的电子邮件ID(法语,德语,等等),那么一些Unicode字符是可能的。然而,
EmailAddressAttribute
阻止了一些不寻常的字符

  • 您可以使用上面的国际字符U+007F,编码为
    UTF-8

  • 空格“(),:;@[]字符允许有限制(它们只允许在带引号的字符串中使用,反斜杠或双引号前必须有反斜杠)

  • 特殊字符!#$%&'*+-/=?^ `{124;}

要验证这一点,请使用正则表达式:

^([^()[];:\s@\“]+([^()[];:\s@\“]+)*)(\“+”)(([^()[],;:\s@\“]+)+[^()[];:\s@\“]{2,})


@想不,不要建议这样可怕的做法。@Think2ceCode1ce不,请不要!不要使用正则表达式解析电子邮件地址,它们都错了,都错了!@想是的,人们已经错了很久了。使用正则表达式验证电子邮件地址毫无意义。你将挫败并排除合法用户。Th关于这个主题已经有很多讨论,例如,请参阅。@Think-see:“不要过分尝试用正则表达式消除无效的电子邮件地址。原因是,在您尝试向某个地址发送电子邮件之前,您并不真正知道该地址是否有效。[…]如果您确实需要确保电子邮件地址有效,则需要向其发送电子邮件“@CodeCaster Great.Learned something today”。这些字符不是无效的“-需要引用。”请参阅,我们不需要在web上使用另一个非工作电子邮件验证正则表达式。请检查上述工作正则表达式的链接。希望您知道它是有效的。举个例子,这个正则表达式会给出误报和误报(尽管不考虑Unicode)。也就是说,这不是也不会成为“转储您最喜欢的电子邮件验证正则表达式”的问题,这不是这个问题的核心。它还有助于链接到您找到这个正则表达式的地方。它简要说明了问题的具体问题,我给出了一个正则表达式,它将通过问题中提到的所需测试用例。我没有提到这是一个“完美的正则表达式”,它会喜欢所有的电子邮件验证。这也显示了你指出的链接(错误的)是多么过时,你会认为我是“抄袭的”。继续尝试建设性的,你真的没有达到。如果你这么说(加上上面的评论),你所说的[所有可能的]电子邮件地址是什么意思?我希望你能肯定地说出抽象的答案,而不是你试图通过删除之前的评论来热衷于这个问题的过时行为。