我使用Fluent Validations实现不区分大小写的比较失败了。我只想比较两个电子邮件字段并忽略大小写。
目前的规则是:
RuleFor(x => x.EmailAddress).NotEmpty().Length(5, 200).EmailAddress();
RuleFor(x => x.ConfirmEmailAddress).NotEmpty().Equal(x => x.EmailAddress).WithMessage("Emails must match");
要将需求添加为不区分大小写,我考虑将比较器与相等的调用一起传递,但这似乎不起作用。
RuleFor(x => x.ConfirmEmailAddress).NotEmpty().Equal(x => x.EmailAddress, StringComparer.CurrentCultureIgnoreCase).WithMessage("Emails must match");
理想情况下,如果可能的话,我希望在客户端进行不区分大小写的比较。是否有人能够就如何实现这一目标提供指导?
我目前使用的NuGet包是:
<package id="FluentValidation" version="5.1.0.0" targetFramework="net45" />
<package id="FluentValidation.MVC4" version="5.1.0.0" targetFramework="net45" />
答案 0 :(得分:2)
您可以使用.Must()扩展方法,其中包含接受父对象和正在验证的属性的重载,如下所示:
RuleFor(x => x.ConfirmEmailAddress)
.NotEmpty()
.Must((x, confirmEmailAddress) => x.EmailAddress.Equals(confirmEmailAddress, StringComparison.OrdinalIgnoreCase))
.WithMessage("Emails must match");
仅在服务器端支持此功能,但documentation:
请注意,FluentValidation也适用于ASP.NET MVC 客户端验证,但并非所有规则都受支持。例如, 使用条件定义的任何规则(使用When / unless),自定义 验证器或对Must的调用不会在客户端运行。该 客户端支持以下验证器:
- NOTNULL / NotEmpty
- 匹配(正则表达式)
- InclusiveBetween(range)
- 信用卡式
- 电子邮件
- EqualTo(跨财产平等比较)
- 长度