Это может сработать, но я ищу лучшее решение, которое я мог бы легко использовать для нескольких свойств / моделей, а затем даже для проектов с точно таким же файлом javascript, чтобы присоединить валидаторы на стороне клиента.

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

RuleFor(x => x.Name).NotEmpty().WithMessage("Name is required")
                    .Length(3, 20).WithMessage("Name must contain between 3 and 20 characters")
                    .Match(@"^[A-Z]").WithMessage("Name has to start with an uppercase letter")
                    .Match(@"^[a-zA-Z0-9_\-\.]*$").WithMessage("Name can only contain: a-z 0-9 _ - .")
                    .Match(@"[a-z0-9]$").WithMessage("Name has to end with a lowercase letter or digit")
                    .NotMatch(@"[_\-\.]{2,}").WithMessage("Name cannot contain consecutive non-alphanumeric characters");



Последнее, что мне нужно выяснить, это как передать сообщение об ошибке, которое устанавливается с помощьюWithMessage() черезGetClientValidationRules() поэтому он попадает в атрибут «data-val-customregex [SOMEFANCYSTRINGHERETOMAKEITUNIQUE]» элемента input.

public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context) {
    var rule = new ModelClientValidationRule();
    rule.ErrorMessage = [INSERT ERRORMESSAGE HERE];
    rule.ValidationType = "customregex" + StringFunctions.RandomLetters(6);
    rule.ValidationParameters.Add("pattern", pattern);

    yield return rule;
}


Я искал исходный код FluentValidation, но не смог понять это. У кого-нибудь есть идеи?

Ответы на вопрос(2)

Ваш ответ на вопрос