EmailAddressAttribute错误地将法语电子邮件地址归类为无效

m.e*_*son 12 c# asp.net-mvc jquery email-validation unobtrusive-validation

我正在使用EmailAddressAttribute在我的模型上使用.

问题是当我使用(完全有效)的电子邮件地址时

óscar@yahoo.com
Run Code Online (Sandbox Code Playgroud)

它说这是无效的.

模型:

public class ForgotPasswordViewModel
{
    [Required]
    [EmailAddress]
    [Display(Name = "Email")]
    public string Email { get; set; }

    public CmsContentPagesModel PageCmsContent { get; set; }

    public CmsContentPagesModel PageCmsContentInfoIcon { get; set; }
    public CmsContentPagesModel PageCmsContentRightPanel { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这是属性的问题,还是以某种方式必须指定法国电子邮件是否可以?

呈现的输入框:

<div class="col-md-5">
     <input class="form-control" data-val="true" data-val-email="The Email field is not a valid e-mail address." data-val-required="The Email field is required." id="Email" name="Email" type="text" value="" />
     <span class="field-validation-valid text-danger" data-valmsg-for="Email" data-valmsg-replace="true"></span>
</div>
Run Code Online (Sandbox Code Playgroud)

我还从客户端验证中提取了正则表达式,以下行返回false

/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test( 'óscar@yahoo.com' );
Run Code Online (Sandbox Code Playgroud)

即使这个确切代码的演示也失败了,它显然符合这个标准.

Leo*_*lev 5

您需要在jQuery Validation Plugin中为电子邮件验证设置自定义正则表达式:

$.validator.methods.email = function( value, element ) {
  return this.optional( element ) || /INSERT_YOUR_REGEX_HERE/.test( value );
}
Run Code Online (Sandbox Code Playgroud)

jQuery Validation Plugin使用RFC 5322 Internet消息协议规范定义有效的电子邮件.该定义不允许在本地部分使用非拉丁字母.项目README.md的相关摘录:

关于电子邮件验证的重要说明.从版本1.12.0开始,此插件使用与HTML5规范建议供浏览器使用的相同的正则表达式.我们将遵循他们的主导并使用相同的检查.如果您认为规范有误,请向他们报告问题.如果您有不同的要求,请考虑使用自定义方法.如果您需要调整内置验证正则表达式模式,请按照文档进行操作.

电子邮件地址国际化由另一个规范定义 - RFC 6530概述和国际化电子邮件框架.它使用术语SMTPUTF8.查看Wikipedia上的电子邮件地址页面以获取更多信息和支持详细信息