针对无效字符

时间:2016-05-25 10:24:47

标签: c# asp.net .net email email-validation

在验证电子邮件地址时,我尝试使用System.ComponentModel.DataAnnotations中的EmailAddressAttribute课程:

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

以及来自System.Net.Mail的{​​{3}}类:

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

MailAddress中所述。这两种方法原则上都有效,它们会捕获无效的电子邮件地址,例如user@,但不符合格式user@host

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

2 个答案:

答案 0 :(得分:4)

这些字符无效。不寻常,但不是无效。您链接的问题甚至包含您不应该关心的原因。

  

在全世界范围内充分利用电子邮件需要这样做      (受其他限制)人们可以使用密切的变化      在他们自己的名字上(用他们自己的语言和      脚本)作为电子邮件地址中的邮箱名称。

- RFC 6530,2012

答案 1 :(得分:-1)

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

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

  • 空间"(),:;<> @ [] 字符允许有限制(只允许在引用字符串,反斜杠或双引号必须以反斜杠开头)

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

正则表达式验证:Link

  

^(([^<>()[];:\ S @ \"] +([^<>()[];:。\ S @ \ 。"] +)*)|(\&#34 + \&#34))@(([^<>()[];:\ S @ \" ] +)+ [^<>()[];:。\ S @ \" {2,})