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