Home > OS >  FluentValidation Validate numbers max length
FluentValidation Validate numbers max length

Time:06-30

I Have to validate the max length of an int or long with FluentValidation

I want to use something like this

int PortCode = 4444;
RuleFor(x => x.PortCode).NotEmpty().MaximumLength(10);

but FluentValidation does not support it

what is the solution;

CodePudding user response:

please use this custom validation

using FluentValidation;

public static class ValidationHelper
{
    public static IRuleBuilderOptions<T, short> MaximumLength<T>(this IRuleBuilder<T, short> rule, int maximumLength) => rule.Must(n => Math.Log10(Math.Abs((double)n)) <= maximumLength).WithMessage("The length of '{PropertyName}' must be '"   maximumLength   "' Digit or fewer.");
    public static IRuleBuilderOptions<T, short?> MaximumLength<T>(this IRuleBuilder<T, short?> rule, int maximumLength) => rule.Must(n => Math.Log10(Math.Abs((double)n.Value)) <= maximumLength).WithMessage("The length of '{PropertyName}' must be '"   maximumLength   "' Digit or fewer.");
    public static IRuleBuilderOptions<T, int> MaximumLength<T>(this IRuleBuilder<T, int> rule, int maximumLength) => rule.Must(n => Math.Log10(Math.Abs((double)n)) <= maximumLength).WithMessage("The length of '{PropertyName}' must be '"   maximumLength   "' Digit or fewer.");
    public static IRuleBuilderOptions<T, int?> MaximumLength<T>(this IRuleBuilder<T, int?> rule, int maximumLength) => rule.Must(n => Math.Log10(Math.Abs((double)n.Value)) <= maximumLength).WithMessage("The length of '{PropertyName}' must be '"   maximumLength   "' Digit or fewer.");
    public static IRuleBuilderOptions<T, long> MaximumLength<T>(this IRuleBuilder<T, long> rule, int maximumLength) => rule.Must(n => Math.Log10(Math.Abs((double)n)) <= maximumLength).WithMessage("The length of '{PropertyName}' must be '"   maximumLength   "' Digit or fewer.");
    public static IRuleBuilderOptions<T, long?> MaximumLength<T>(this IRuleBuilder<T, long?> rule, int maximumLength) => rule.Must(n => Math.Log10(Math.Abs((double)n.Value)) <= maximumLength).WithMessage("The length of '{PropertyName}' must be '"   maximumLength   "' Digit or fewer.");
    public static IRuleBuilderOptions<T, decimal> MaximumLength<T>(this IRuleBuilder<T, decimal> rule, int maximumLength) => rule.Must(n => Math.Log10(Math.Abs((double)n)) <= maximumLength).WithMessage("The length of '{PropertyName}' must be '"   maximumLength   "' Digit or fewer.");
    public static IRuleBuilderOptions<T, decimal?> MaximumLength<T>(this IRuleBuilder<T, decimal?> rule, int maximumLength) => rule.Must(n => Math.Log10(Math.Abs((double)n.Value)) <= maximumLength).WithMessage("The length of '{PropertyName}' must be '"   maximumLength   "' Digit or fewer.");
    public static IRuleBuilderOptions<T, double> MaximumLength<T>(this IRuleBuilder<T, double> rule, int maximumLength) => rule.Must(n => Math.Log10(Math.Abs(n)) <= maximumLength).WithMessage("The length of '{PropertyName}' must be '"   maximumLength   "' Digit or fewer.");
    public static IRuleBuilderOptions<T, double?> MaximumLength<T>(this IRuleBuilder<T, double?> rule, int maximumLength) => rule.Must(n => Math.Log10(Math.Abs(n.Value)) <= maximumLength).WithMessage("The length of '{PropertyName}' must be '"   maximumLength   "' Digit or fewer.");
}

CodePudding user response:

you don't need custom validation

you can do this instead

RuleFor(a => a.PortCode).NotEmpty().Must(w => w.ToString().Length < 10);

  • Related