我使用EmailAddressAttribute在我的模型上使用。
问题是当我使用(完全有效)
的电子邮件地址时óscar@yahoo.com
它说它无效。
型号:
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.!#$%&'*+\/=?^_`{|}~-]+@[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' );
显然符合this standard即使这个确切的演示code also fails。
答案 0 :(得分:5)
您需要在jQuery Validation Plugin中为电子邮件验证设置自定义正则表达式:
$.validator.methods.email = function( value, element ) {
return this.optional( element ) || /INSERT_YOUR_REGEX_HERE/.test( value );
}
jQuery Validation Plugin使用有效电子邮件的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。查看维基百科上的Email address page以获取更多信息和支持详情。
答案 1 :(得分:2)
正如你在正则表达式中看到的那样:
/^[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' );
ó
字符不在
您可以使用以下正则表达式:
/^[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 àâäèéêëîïóôœùûüÿçÀÂÄÈÉÊËÎÏÔŒÙÛÜŸÇ.!#$%&'*+\/=?^_`{|}~-])?)*$/
您还可以创建自定义属性作为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);
}
}
答案 2 :(得分:1)
问题的背景对于确定正确的答案非常重要。在大多数情况下,最好坚持使用简单的解决方案:
^\S+@\S+\.\S+$
此正则表达式将存在匹配某些无效电子邮件地址的风险,但会强制执行常规结构。理想情况下,您可以通过电子邮件确认框或确认电子邮件执行第二轮验证,但即使没有额外的验证,这仍然可以捕获大多数无意中无效的条目。
答案 3 :(得分:-1)
使用此正则表达式的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
答案 4 :(得分:-4)
我不知道您如何验证电子邮件地址,我尝试像字符串一样验证您的电子邮件,我的变量isValid
已经过验证。
EmailAddressAttribute testEmailAddress = new EmailAddressAttribute();
bool isValid = testEmailAddress.IsValid("óscar@yahoo.com");
希望这些有用。