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

在验证电子邮件地址时,我尝试使用System.ComponentModel.DataAnnotationsEmailAddressAttribute类:

[EmailAddress(ErrorMessage = "Invalid Email Address")]
public string Email { get; set; }

System.Net.MailMailAddress类执行以下操作:

bool IsValidEmail(string email)
{
    try {
        var addr = new System.Net.Mail.MailAddress(email);
        return addr.Address == email;
    }
    catch {
        return false;
    }
}

如C#代码中所建议的,以验证电子邮件地址。 这两种方法原则上都起作用,它们捕获无效的电子邮件地址,例如user@ ,而不履行user@host格式。

我的问题是,这两种方法都没有在用户字段中检测到无效字符,例如æ, ø, or å (eg åge@gmail.com) 。 是否有任何理由为什么这些角色没有返回验证错误? 有没有人有一个优雅的解决方案,如何在用户字段中包含无效字符的验证?


这些字符不是无效的。 不寻常的,但不是无效的。 你连接的问题甚至包含一个你不应该在乎的解释。

在全球范围内充分使用电子邮件要求(受到其他限制)人们能够使用他们自己的名字(使用他们自己的语言和脚本正确书写)的密切变体作为电子邮件地址中的邮箱名称。

- RFC 6530,2012


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

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

  • 空格“(),:; <> @] []字符是有限制的(它们只允许在带引号的字符串中,反斜线或双引号必须以反斜杠开头)

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

  • 正则表达式来验证这一点:链接

    ^(([^ <>()[];: S @ “] +([^ <>()[];: S @ ”。] +)*)|(” 。+ “))@(([^ <>()[];: S @ ”] +)+ [^ <>()[];: S @ “]。{ 2,})

    链接地址: http://www.djcxy.com/p/16589.html

    上一篇: Validate email address against invalid characters

    下一篇: validation allow emails without a dot?