C# 客户端上的自定义电子邮件地址属性
晚上好 我创建了下面的验证属性来检查电子邮件列表是否有效C# 客户端上的自定义电子邮件地址属性,c#,asp.net-mvc,client-side-validation,validationattribute,C#,Asp.net Mvc,Client Side Validation,Validationattribute,晚上好 我创建了下面的验证属性来检查电子邮件列表是否有效 [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter)] public class EmailAddressListAttribute : ValidationAttribute, IClientValidatable { private const string RegexPattern =
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter)]
public class EmailAddressListAttribute : ValidationAttribute, IClientValidatable
{
private const string RegexPattern = @"[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*" +
@"@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?";
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
ErrorMessage = $"{validationContext.DisplayName} contains invalid email addresses";
var emailList = value.ToString().Split(';');
return emailList.Where(e => !IsValidEmail(e))
.ToList()
.Count == 0 ? null : new ValidationResult(ErrorMessage);
}
private static bool IsValidEmail(string emailAddress)
{
return Regex.IsMatch(emailAddress, RegexPattern, RegexOptions.IgnoreCase);
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
yield return new ModelClientValidationRule
{
ErrorMessage = ErrorMessage,
ValidationType = "emailaddresslist"
};
}
}
我让它工作了!这是我的属性的代码
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
public sealed class EmailAddressListAttribute : ValidationAttribute, IClientValidatable
{
private const string DefaultErrorMessage = "{0} contains invalid email addresses.";
private const string RegexPattern = @"[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*" +
@"@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?";
public EmailAddressListAttribute()
: base(DefaultErrorMessage)
{
}
public override string FormatErrorMessage(string name)
{
return string.Format(ErrorMessageString, name);
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
ErrorMessage = $"{validationContext.DisplayName} contains invalid email addresses";
if (value.ToString().IsNullOrWhiteSpace()) return null;
var emailList = value.ToString().Split(';');
return emailList.Where(e => !IsValidEmail(e))
.ToList()
.Count == 0 ? null : new ValidationResult(ErrorMessage);
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
var clientValidationRule = new ModelClientValidationRule()
{
ErrorMessage = FormatErrorMessage(metadata.GetDisplayName()),
ValidationType = "emailaddresslist"
};
clientValidationRule.ValidationParameters.Add("otherproperty", "");
return new[] { clientValidationRule };
}
private static bool IsValidEmail(string emailAddress)
{
return Regex.IsMatch(emailAddress, RegexPattern, RegexOptions.IgnoreCase);
}
}
[AttributeUsage(AttributeTargets.Property,AllowMultiple=false,Inherited=true)]
公共密封类EmailAddressListAttribute:ValidationAttribute,IClientValidable
{
private const string DefaultErrorMessage=“{0}包含无效的电子邮件地址。”;
private const string regexpatern=@“[a-z0-9!#$%&'*+/=?^ `{124;}-]+(?:\.[a-z0-9!#$%&'*+/=?^ `{124;}-]+”+
@“(?:[a-z0-9-]*[a-z0-9])?\)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])”;
公共EmailAddressListAttribute()
:base(DefaultErrorMessage)
{
}
公共重写字符串FormatErrorMessage(字符串名称)
{
返回string.Format(ErrorMessageString,name);
}
受保护的重写ValidationResult有效(对象值,ValidationContext ValidationContext)
{
ErrorMessage=$“{validationContext.DisplayName}包含无效的电子邮件地址”;
if(value.ToString().IsNullOrWhiteSpace())返回null;
var emailList=value.ToString().Split(“;”);
返回电子邮件列表。其中(e=>!IsValidEmail(e))
托利斯先生()
.Count==0?空:新的ValidationResult(ErrorMessage);
}
公共IEnumerable GetClientValidationRules(ModelMetadata元数据、ControllerContext上下文)
{
var clientValidationRule=新模型clientValidationRule()
{
ErrorMessage=FormatErrorMessage(metadata.GetDisplayName()),
ValidationType=“emailaddresslist”
};
clientValidationRule.ValidationParameters.Add(“otherproperty”和“”);
返回新的[]{clientValidationRule};
}
私有静态bool IsValidEmail(字符串emailAddress)
{
返回Regex.IsMatch(电子邮件地址、regexpatern、RegexOptions.IgnoreCase);
}
}
下面是用于客户端的jquery
(function ($) {
$.validator.addMethod("emailaddresslist", function (value, element, params) {
if (!this.optional(element)) {
if (value == "") return true;
var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
var emailAddressList = value.split(";")
var arrayLength = emailAddressList.length;
for (var i = 0; i < arrayLength; i++) {
if (!re.test(emailAddressList[i].trim())) return false;
}
}
return true;
});
$.validator.unobtrusive.adapters.addSingleVal("emailaddresslist", "otherproperty");
}(jQuery));
(函数($){
$.validator.addMethod(“emailaddresslist”,函数(值、元素、参数){
如果(!this.optional(元素)){
if(value==“”)返回true;
变量re=/^([^()[\]\\,;:\s@\“]+(\.[^()[\]\,;:\s@\“]+)*)(\'+\”)(\[[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[1,3}.[0-9]{1,3}.];
var emailAddressList=value.split(“;”)
var arrayLength=emailAddressList.length;
对于(变量i=0;i
您是否在使用不引人注目的验证?您需要为客户端验证编写脚本。建议您阅读。我已经尝试添加上面的javascript,但提交时无法启动。
(function ($) {
$.validator.addMethod("emailaddresslist", function (value, element, params) {
if (!this.optional(element)) {
if (value == "") return true;
var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
var emailAddressList = value.split(";")
var arrayLength = emailAddressList.length;
for (var i = 0; i < arrayLength; i++) {
if (!re.test(emailAddressList[i].trim())) return false;
}
}
return true;
});
$.validator.unobtrusive.adapters.addSingleVal("emailaddresslist", "otherproperty");
}(jQuery));