должна быть проверена только минимальная/максимальная длина

Я использую инфраструктуру FluentValidation в своем проекте ASP.NET MVC 4 для проверки как на стороне сервера, так и на стороне клиента.

Существует ли собственный (не взлом) способ проверки длины строки только с максимальной или только с минимальной длиной?

Например так:

var isMinLengthOnly = true;
var minLength = 10;
RuleFor(m => m.Name)
    .NotEmpty().WithMessage("Name required")
    .Length(minLength, isMinLengthOnly);

шаблон сообщения об ошибке по умолчанию не должен быть

'Name' must be between 10 and 99999999 characters. You entered 251 characters.

но

'Name' must be longer than 10 characters. You entered 251 characters.

И атрибуты на стороне клиента должны поддерживаться, например. хаки вроде RuleFor(m => m.Name.Length).GreaterThanOrEqual(minLength) (не уверен, что сработает) неприменимы.


person Evgeny Levin    schedule 18.10.2013    source источник


Ответы (2)


Ты можешь использовать

RuleFor(x => x.ProductName).NotEmpty().WithMessage("Name required")
            .Length(10);

чтобы получить сообщение

'Name' must be longer 10 characters. You entered 251 characters.

если вы хотите проверить минимальную и максимальную длину

RuleFor(x => x.Name).NotEmpty().WithMessage("Name required")
                    .Must(x => x.Length > 10 && x.Length < 15)
                    .WithMessage("Name should be between 10 and 15 chars");
person sree    schedule 28.01.2014

Если вы хотите проверить только минимальную длину:

RuleFor(x => x.Name).NotEmpty().WithMessage("Name required")
    .Length(10)
    .WithMessage("Name should have at least 10 chars.");

Если вы хотите проверить только максимальную длину:

RuleFor(x => x.Name).NotEmpty().WithMessage("Name required")
    .Length(0, 15)
    .WithMessage("Name should have 15 chars at most.");

Это документация API для второго (public static IRuleBuilderOptions<T, string> Length<T>(this IRuleBuilder<T, string> ruleBuilder, int min, int max)):

Сводка: определяет средство проверки длины в текущем построителе правил, но только для строковых свойств. Проверка завершится ошибкой, если длина строки выходит за пределы указанного диапазона. Ассортимент включительно.

Параметры:

ruleBuilder: построитель правил, в котором должен быть определен валидатор.

мин:

макс.:

Параметры типа:

T: тип проверяемого объекта.

Вы также можете создать такое расширение (используя Must вместо Length):

using FluentValidation;

namespace MyProject.FluentValidationExtensiones
{
    public static class Extensiones
    {
        public static IRuleBuilderOptions<T, string> MaxLength<T>(this IRuleBuilder<T, string> ruleBuilder, int maxLength)
        {
            return ruleBuilder.Must(x => string.IsNullOrEmpty(x) || x.Length <= maxLength);
        }
    }
}

И используйте это так:

RuleFor(x => x.Name).NotEmpty().WithMessage("Name required")
    .MaxLength(15)
    .WithMessage("Name should have 15 chars at most.");
person Guillermo Gutiérrez    schedule 10.05.2017