EmailAddressAttribute 不需要

2024-03-14

我有一个[EmailAddress]来自 .net 4.5 的模型属性上的 DataAnnotation,它返回一个 '电子邮件字段不是有效的电子邮件地址。' 当 Email 属性为空时,验证期间出错。

虽然这在技术上是正确的,但我预计这个空值只能用[Required]注解。

是否有任何我缺少的参数可以传递给[EmailAddress]注释以允许空字符串进行验证,或者我是否必须回退到使用自定义验证器正则表达式?


没有这样的参数EmailAddressAttribute。该属性的验证代码如下:

if (value == null)
{
    return true;
}
string input = value as string;
return ((input != null) && (_regex.Match(input).Length > 0));

正则表达式定义为(空字符串不匹配):

_regex = new Regex(@"^((([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])))\.?$", RegexOptions.Compiled | RegexOptions.ExplicitCapture | RegexOptions.IgnoreCase);

为了实现你的目标,你可以创建你可以继承的DataTypeAttribute覆盖IsValid方法,所以它会返回true对于空或空字符串并使用实例EmailAddressAttribute。这应该是这样的:

public override bool IsValid(object value)
{
    if (value == null)
    {
        return true;
    }
    string input = value as string;
    var emailAddressAttribute = new EmailAddressAttribute();

    return (input != null) && (string.IsNullOrEmpty(input) || emailAddressAttribute.IsValid(input));
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

EmailAddressAttribute 不需要 的相关文章

随机推荐