2015-07-10 3 views
1

У меня есть правило проверки, которое является общим для многих свойств, которые я хотел бы централизовать в DRY, но в то время как правила NotEmpty() и т. Д. Работают нормально, Matches(...) и другие правила проверки подлинности только строки не компилируются.FluentValidation централизовать валидатор регулярных выражений в расширителе валидатора

Нет проблем:

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."); 
    } 

Какое правило построитель подписи есть для строковых только варианты?

ответ

0

Решение повторно использовать фактические RegularExpressionValidator:

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

Вы можете принять свои собственные ответы, а также, что помогает нам определить вопросы, нуждающиеся в помощи :) –

+0

я знаю, но все равно нужно ждать до завтра, прежде чем разрешено ;-) – Ted