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

FluentValidation centralize a regex validator in validator extension

我有一个验证规则,它适用于我想集中到 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.");
    }

什么规则生成器签名可用于仅字符串选项?

解决方法是重用实际的 RegularExpressionValidator:

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