案例不敏感与流利验证比较

时间:2015-06-22 15:30:29

标签: c# string-comparison fluentvalidation

我使用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" />

1 个答案:

答案 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(跨财产平等比较)
  •   
  • 长度
  •