【问题标题】:Why does EmailAddressAttribute.IsValid and MailAddress think that emails which contain "ª" are valid? [duplicate]为什么 EmailAddressAttribute.IsValid 和 MailAddress 认为包含“ª”的电子邮件是有效的? [复制]
【发布时间】:2022-01-09 07:31:43
【问题描述】:

我有这个 C# 代码:

void Main()
{
    // method 1 - using MailAddress
    var email = "fooªbar@cander.com";
    Console.WriteLine(IsValidEmail(email));
    
    // method 2 - using EmailAddressAttribute
    var validator = new System.ComponentModel.DataAnnotations.EmailAddressAttribute();
    Console.WriteLine(validator.IsValid(email));
}

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

这验证了 fooªbar@cander.com 电子邮件地址。并且......它验证了它,尽管它有“ª”符号。为什么?根据:What characters are allowed in an email address? 应该是无效的

【问题讨论】:

标签: c# email-validation


【解决方案1】:

它会验证它,尽管它有“ª”符号。为什么?

因为您的正则表达式允许在 @ 之前使用“一个或多个 \word 字符”,而 ª 是一个单词字符:

RegexStorm 使用 .net 引擎:您可以看到 \w 模式(单个单词字符)已成功匹配 ª(一个匹配)

根据:电子邮件地址中允许使用哪些字符?它不应该是有效的

唉,你使用的正则表达式没有准确地实现链接问题中给出的规范

在验证电子邮件地址时,我真的认为您不应该尝试将其控制到非常精细的程度 - 形成和维护一个考虑所有变化的复杂正则表达式是一件令人头疼的事情,但它并没有真正带来好处多多,它只会为那些因为您的正则表达式中的错误而无法验证有效电子邮件的用户产生一个痛点。

当我们测试电子邮件的有效性时,我们基本上只检查它是否包含@..如果用户输入错误会发生什么最糟糕的情况?

(如果图片看起来很大,请道歉;在手机上看起来很合理,但我记得 iPhone 屏幕截图有时在网络上看起来有点过大)

【讨论】:

    猜你喜欢
    • 2011-11-02
    • 1970-01-01
    • 2013-02-25
    • 1970-01-01
    • 2013-10-28
    • 2015-06-12
    • 1970-01-01
    • 2012-01-23
    • 2017-09-04
    相关资源
    最近更新 更多