根据无效字符验证电子邮件地址
在验证电子邮件地址时,我尝试使用System.ComponentModel.DataAnnotations
的EmailAddressAttribute
类:
[EmailAddress(ErrorMessage = "Invalid Email Address")]
public string Email { get; set; }
和System.Net.Mail
的MailAddress
类执行以下操作:
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