FluentValidation在验证程序扩展中集中了一个正则表达式验证程序

时间:2015-07-10 18:06:41

标签: asp.net-mvc validation fluentvalidation

我有一个验证规则,对于我想要集中到DRY的许多属性来说很常见,但是NotEmpty()规则等工作正常,Matches(...)和其他仅字符串验证器规则不编译。

没问题:

    public static IRuleBuilderOptions<T, TProperty> MustNotContainHtml<T, TProperty>(this IRuleBuilderOptions<T, TProperty> ruleBuilder)       
    {
        return ruleBuilder.NotEmpty().WithMessage("Some message.");
    }

理解上不会编译,因为使用仅为字符串的Matches(...)

    public static IRuleBuilderOptions<T, TProperty> MustNotContainHtml<T, TProperty>(this IRuleBuilderOptions<T, TProperty> ruleBuilder)
    {
        return ruleBuilder.Matches("<[a-z!/?]|&#").WithMessage("'{PropertyName}' contains special HTML characters which is not allowed.");
    }

哪些规则构建器签名可用于仅字符串选项?

1 个答案:

答案 0 :(得分:1)

解决方案是重用实际的RegularExpressionValidator

    public static IRuleBuilderOptions<T, string> MustNotContainHtml<T>(this IRuleBuilder<T, string> ruleBuilder)
    {
        return ruleBuilder.SetValidator(new RegularExpressionValidator("<[a-z!/?]|&#")).WithMessage("Some custom message.");
    }