不区分大小写与 Fluent 验证进行比较

Jer*_*ode 4 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");
Run Code Online (Sandbox Code Playgroud)

为了添加不区分大小写的要求,我考虑通过 equal 调用传递比较器,但这似乎不起作用。

RuleFor(x => x.ConfirmEmailAddress).NotEmpty().Equal(x => x.EmailAddress, StringComparer.CurrentCultureIgnoreCase).WithMessage("Emails must match"); 
Run Code Online (Sandbox Code Playgroud)

理想情况下,如果可能的话,我希望在客户端进行不区分大小写的比较。有人能够提供如何实现这一目标的指导吗?

我当前使用的 NuGet 包是:

<package id="FluentValidation" version="5.1.0.0" targetFramework="net45" />
<package id="FluentValidation.MVC4" version="5.1.0.0" targetFramework="net45" />
Run Code Online (Sandbox Code Playgroud)

Yan*_*eus 5

您可以使用 .Must() 扩展方法,并使用接受父对象和正在验证的属性的重载,如下所示:

RuleFor(x => x.ConfirmEmailAddress)
    .NotEmpty()
    .Must((x, confirmEmailAddress) => x.EmailAddress.Equals(confirmEmailAddress, StringComparison.OrdinalIgnoreCase))
    .WithMessage("Emails must match");
Run Code Online (Sandbox Code Playgroud)

然而,根据文档,这仅在服务器端受支持:

请注意,FluentValidation 还可以与 ASP.NET MVC 的客户端验证一起使用,但并非所有规则都受支持。例如,使用条件(使用 When/Unless)、自定义验证器或 Must 调用定义的任何规则都不会在客户端运行。客户端支持以下验证器:

  • 非空/非空
  • 匹配(正则表达式)
  • InclusiveBetween(范围)
  • 信用卡
  • 电子邮件
  • EqualTo(跨属性相等比较)
  • 长度