【问题标题】:Case Insensitive Compare with Fluent Validation不区分大小写与 Fluent 验证的比较
【发布时间】:2015-06-23 04:46:04
【问题描述】:

我未能成功使用Fluent Validations 实现不区分大小写的比较。我只是想比较两个电子邮件字段并忽略大小写。

目前的规则是:

RuleFor(x => x.EmailAddress).NotEmpty().Length(5, 200).EmailAddress();
RuleFor(x => x.ConfirmEmailAddress).NotEmpty().Equal(x => x.EmailAddress).WithMessage("Emails must match");

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

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" />

【问题讨论】:

    标签: c# string-comparison fluentvalidation


    【解决方案1】:

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

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

    这仅在服务器端受支持,但是,根据documentation

    请注意,FluentValidation 也适用于 ASP.NET MVC 的 客户端验证,但并非所有规则都受支持。例如, 使用条件(使用何时/除非)定义的任何规则,自定义 验证器或对 Must 的调用将不会在客户端运行。这 客户端支持以下验证器:

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

    【讨论】:

    • 这看起来通过了服务器端的初始测试。看起来客户端验证在这里丢失了。那准确吗?我是否需要编写额外的自定义 .js 和 .css 来增强它?
    • @Jerode:恐怕你可以看看客户端 EqualTo 内置验证器。我不得不承认我是一个服务器端的人,所以我自己对那些验证器不太熟悉。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-28
    • 1970-01-01
    • 1970-01-01
    • 2016-05-11
    • 2017-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多