2015-06-22 110 views
2

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

回答

2

您可以使用。必须()扩展方法,与接受两者的父对象和属性被验证,像这样的超载:

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

这是仅支持服务器端,但是,由于每documentation

请注意,FluentValidation也将与ASP.NET MVC的 客户端验证配合使用,但并非所有规则都受支持。例如, 使用条件(与When /除外),自定义 验证程序或Must必须在客户端上不会运行定义的任何规则。所述 以下验证器所支持的客户端上:

  • NOTNULL/NotEmpty
  • 匹配(正则表达式)
  • InclusiveBetween(范围)
  • 信用卡式
  • 电子邮件
  • EqualTo(交叉性平等比较)
  • 长度
+0

这看起来通过初始测试服务器端。它看起来像客户端验证丢失在这里。这是否准确?我需要编写额外的自定义.js和.css来增强它吗? – Jerode

+1

@Jerode:恐怕是这样,你可以看看客户端的EqualTo内置验证器。我不得不承认我是一个服务器端的人,所以我不太熟悉那些验证器。 –