忽略MVC模型中的REGEX或根据用户输入选择另一个REGEX
本文关键字:REGEX 用户 输入 另一个 选择 MVC 模型 忽略 | 更新日期: 2023-09-27 18:20:32
我的一个类中有两个字段用于地址,如
public string Country { get; set; }
[Required(ErrorMessage = "Postcode is required")]
[RegularExpression(@"REGEX",
ErrorMessage = "Please enter a valid UK Postcode)]
public string postcode { get; set;}
但是,如果用户选择了英国以外的国家,则我希望我的邮政编码字段至少忽略REGEX,并在理想情况下根据国家使用另一个REGEX进行验证。有人能建议模型本身是否可能做到这一点吗?
有几个不同的选项可供选择:
-
创建一个100%自定义验证属性,根据您的需要组合
Required
和RegularExpression
属性。因此,在该自定义属性中,您将执行所需的所有验证,并将该值与Country
属性进行比较,以便根据需要选择性地应用RegEx。 -
为您关心的每个国家/地区创建一个不同的
postcode
属性,并使用`RequiredIfAttribute(请参阅RequiredIf Conditional Validation attribute)来确定实际需要哪个属性。然后,您可以使用Javascript来显示/隐藏适当的输入字段。
您可以使用IValidatableObject
:执行此操作
class MyClass : IValidatableObject {
public string Country { get; set; }
[Required(ErrorMessage = "Postcode is required")]
public string postcode { get; set;}
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) {
if (!String.IsNullOrEmpty(Country)
&& !String.IsNullOrEmpty(postcode)) {
switch (Country.ToUpperInvariant()) {
case "UK":
if (!Regex.IsMatch(postcode, "[regex]"))
yield return new ValidationResult("Invalid UK postcode.", new[] { "postcode" });
break;
default:
break;
}
}
}
}