EmailAddressAttribute将法国电子邮件地址错误地分类为无效
我在模型上使用EmailAddressAttribute。EmailAddressAttribute将法国电子邮件地址错误地分类为无效
问题是,当我使用的
ó[email protected]
它说,这是无效的(非常有效)的e-mail地址。
型号:
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; }
}
这与属性的问题,或者我无论如何都必须指定法国的电子邮件都还好吗?为渲染
输入框:
<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>
我还提取从客户端验证正则表达式,下面一行返回false
/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-][email protected][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('ó[email protected]');
这显然与this standard即使符合演示此确切code also fails。
你需要设置在jQuery验证插件电子邮件验证定制的正则表达式:
$.validator.methods.email = function(value, element) {
return this.optional(element) || /INSERT_YOUR_REGEX_HERE/.test(value);
}
jQuery验证插件使用一个有效的电子邮件RFC 5322 Internet Message Protocol specification定义。该定义不允许在本地部分使用非拉丁字母。从项目的README.md相关摘录:
重要注意事项有关电子邮件验证。从版本1.12.0开始,这个 插件使用的是与HTML5 specification suggests for browsers to use相同的正则表达式。我们将按照他们的领导 并使用相同的支票。如果您认为规格有误,请致电 。如果您有不同的要求, 考虑using a custom method。如果您需要调整 内置的验证正则表达式模式,请follow the documentation。
电子邮件地址国际化由另一个规范定义 - RFC 6530 Overview and Framework for Internationalized Email。它使用术语SMTPUTF8。请查看Wikipedia上的Email address page了解更多信息和支持细节。
我跟这个一起使用了'EmailAddressAttribute'在服务器上使用的正则表达式,所以我可以肯定client + server会同意的。另外,我开始了一个错误[在项目上](https://github.com/jquery-validation/jquery-validation/issues/1949),所以至少有关人员都知道。这个答案的优雅,这意味着我可以将代码包含在一个新的.js文件旁边,这就是为什么我已经授予这个奖励。非常感谢@Leonid Vesilyev,继续保持。 –
我不知道你如何验证电子邮件地址,我试图验证你的电子邮件像一个字符串,我的变量isValid
已验证与真实。
EmailAddressAttribute testEmailAddress = new EmailAddressAttribute();
bool isValid = testEmailAddress.IsValid("ó[email protected]");
希望这些是有用的。
不是一个真正的答案... –
@MarcelN:这是一个有效的非重复声明,在问题被延长之前。 –
正如你可以在正则表达式看:
/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-][email protected][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('ó[email protected]');
的ó
字符不在
您可以使用下面的正则表达式的范围:
/^[a-zA-Z0-9 àâäèéêëîïóôœùûüÿçÀÂÄÈÉÊËÎÏÔŒÙÛÜŸÇ.!#$%&'*+\/=?^_`{|}~-][email protected][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 àâäèéêëîïóôœùûüÿçÀÂÄÈÉÊËÎÏÔŒÙÛÜŸÇ.!#$%&'*+\/=?^_`{|}~-])?)*$/
而且你还可以科瑞一个自定义属性为FrenchEmailAddress,以便通过使用我发布在自定义属性中的正则表达式来验证属性
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
public class FrenchEmailAddressAttribute : ValidationAttribute
{
public string Pattern { get; set; }
public RegexOptions Options { get; set; }
public FrenchEmailAddressAttribute(string pattern, RegexOptions options = RegexOptions.None)
{
Pattern = pattern;
Options = options;
}
public override bool IsValid(object value)
{
return IsValid(value as string);
}
public bool IsValid(string value)
{
return string.IsNullOrEmpty(value) ? true : new Regex(Pattern, Options).IsMatch(value);
}
}
你必须改变其他的A-Z范围。 –
@HenkHolterman感谢提及,我编辑了我的答案 – Karamafrooz
System.ComponentModel.DataAnnotations.EmailAddressAttribute使用此正则表达式的类。
const string pattern = @"^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$";
和验证您的电子邮件地址好像说@ThomasRainero
语境的问题是要确定正确的答案非常重要。在大多数情况下,最好是坚持使用简单的解决方案:
^\[email protected]\S+\.\S+$
此正则表达式将运行匹配一些无效的电子邮件地址的风险,但将执行的总体结构。理想情况下,您可以通过电子邮件确认框或确认电子邮件执行第二轮验证,但即使没有额外的验证,也应该能够捕获大多数无意无效的条目。
'EmailAddressAttribute'使用以下正则表达式来验证值:[source](https://referencesource.microsoft.com/#System.ComponentModel.DataAnnotations/DataAnnotations/EmailAddressAttribute.cs,54)。你提供的电子邮件地址与正则表达式匹配,所以它应该是有效的。你可以发布c#模型吗?顺便说一下,我最近写了一篇关于[验证电子邮件地址.NET]的博客文章(https://www.softfluent.com/blog/dev/2017/02/06/Advanced-email-address-validation-in-NET ) – meziantou
@meziantou - 这是个好消息,我添加了模型。 –
检查此线程:http://*.com/questions/12180753/regularexpressionvalidator-control-not-allowing-emails-with-french-characters-f –