FluentValidation 内置验证器 Built-in Validators

FluentValidation 带着一些内置的验证器, 每个验证器都包含着一些特殊的占位符,当验证器创建消息的时候把它会把这些占位符会替换成合适的值。 (在使用VisualStudio的情况。这些验证器在我们指入点的时候都会显示出来。)

不能为Null验证器 NotNull Validator

确保指定属性不是Null的。

例:

RuleFor(customer => customer.Surname).NotNull();

示例错误:'Surname' 不能为Null。

占位符:

  • 待验证属性的名称
  • 属性的当前值

非空验证器 NotEmpty Validator

确保指定属性不为空, 字符串string是不能empty 和 whitespace (值类型不能是默认值, 例如 int 不能为0)

列如:

RuleFor(customer => customer.Surname).NotEmpty();

示例错误: 'Surname' 不能为空。

占位符:

  • 待验证属性的名称
  • 属性的当前值

不等于验证器 NotEqual Validator

确保指定属性的值不等于特定值(或不等于另一个属性的值)

列如:

//不等于一个特定的值
RuleFor(customer => customer.Surname).NotEqual("Foo");

//不等于其它属性
RuleFor(customer => customer.Surname).NotEqual(customer => customer.Forename);

示例错误: 'Surname' 不能和 'Foo' 相等。

占位符:

  • 待验证属性的名称
  • – 待比较的值
  • 属性的当前值

可选, 指定比较器

RuleFor(customer => customer.Surname).NotEqual("Foo", StringComparer.OrdinalIgnoreCase);

相等验证器 Equal Validator

确保指定属性的值等于特定值(或等于另一个属性的值)

列如:

//等于特定的值
RuleFor(customer => customer.Surname).Equal("Foo");

//等于其它属性
RuleFor(customer => customer.Password).Equal(customer => customer.PasswordConfirmation);

示例错误: 'Surname' 应该和 'Foo' 相等。

占位符:

  • 待验证属性的名称
  • – 待比较的值
  • 属性的当前值

可选, 指定比较器

RuleFor(customer => customer.Surname).Equal("Foo", StringComparer.OrdinalIgnoreCase);

长度验证器 Length Validator

确保特定字符串属性的长度在指定范围内。 但是,它不能确保字符串不为null。

列如:


RuleFor(customer => customer.Surname).Length(1, 250); //在1到250个字符之间 (含)

示例错误: 'Surname' 的长度必须在 1 到 250 字符,您输入了 0 字符。

注意: 只适用于字符串

占位符:

  • 待验证属性的名称
  • – 最小长度
  • – 最大长度
  • – 属性的当前长度
  • 属性的当前值

最大长度验证器 MaxLength Validator

确保特定字符串属性的长度不超过指定的值

列如:


RuleFor(customer => customer.Surname).MaximumLength(5); //必须是5以内(含)

示例错误: 'Surname' 必须小于或等于5个字符。您输入了12个字符。

注意: 只适用于字符串

占位符:

  • 待验证属性的名称
  • – 最大长度
  • – 属性的当前长度
  • 属性的当前值

最小长度验证器 MinLength Validator

确保特定字符串属性的长度超过指定的值

列如:


RuleFor(customer => customer.Surname).MinimumLength(10); //必须大于等于10个字符

示例错误: 'Surname' 必须大于或等于10个字符。您输入了3个字符。

注意: 只适用于字符串

占位符:

  • 待验证属性的名称
  • – 最小长度
  • – 属性的当前长度
  • 属性的当前值

小于验证器 Less Than validator

确保指定属性的值小于特定值(或小于另一个属性的值) 列如:


//小于一个特定的值
RuleFor(customer => customer.Age).LessThan(5);

//小于另一个属性
RuleFor(customer => customer.Age).LessThan(customer => customer.MaxAge);

示例错误: 'Age' 必须小于 '5'。

注意: 只适用于有实现了接口 IComparable的类

占位符:

  • 待验证属性的名称
  • – 用来比较的值
  • 属性的当前值

小于或等于验证器 Less Than Or Equal Validator

确保指定属性的值小于或等特定值(或 小于或等于另一个属性的值)

列如:


//小于或等于一个特定的值
RuleFor(person => person.Age).LessThanOrEqualTo(5);

//小于或等于另一个属性
RuleFor(customer => customer.Age).LessThanOrEqualTo(customer => customer.MaxAge);

示例错误: 'Age' 必须小于或等于 '5'。 注意: 只适用于有实现了接口 IComparable的类

占位符:

  • 待验证属性的名称
  • – 用来比较的值
  • 属性的当前值

大于验证器 Greater Than validator

确保指定属性的值大于特定值(或大于另一个属性的值) 列如:


//大于一个特定的值
RuleFor(customer => customer.Age).GreaterThan(5);

//大于另一个属性
RuleFor(customer => customer.Age).GreaterThan(customer => customer.MaxAge);

示例错误: 'Age' 必须大于 '5'。

注意: 只适用于有实现了接口 IComparable的类

占位符:

  • 待验证属性的名称
  • – 用来比较的值
  • 属性的当前值

大于或等于验证器 Greater Than Or Equal Validator

确保指定属性的值大于或等特定值(或 大于或等于另一个属性的值)

列如:


//大于或等于一个特定的值
RuleFor(person => person.Age).GreaterThanOrEqualTo(5);

//大于或等于另一个属性
RuleFor(customer => customer.Age).GreaterThanOrEqualTo(customer => customer.MaxAge);

示例错误: 'Age' 必须大于或等于 '5'。 注意: 只适用于有实现了接口 IComparable的类

占位符:

  • 待验证属性的名称
  • – 用来比较的值
  • 属性的当前值

断言验证器 Predicate Validator

(也称为必须 Must)

将指定属性的值传递到 自定义验证逻辑的委托中

列如:


RuleFor(customer => customer.Surname).Must(surname => surname == "Foo");

示例错误: 'Surname' 不符合指定的条件。 同常在使用这个的验证器的时候我们会自己定义错误消息,不然的话默认的错误消息就不太友好了 .WithMessage("surname 应该等于Foo");

占位符:

  • 待验证属性的名称
  • 属性的当前值

注意,这边有一个额外的重载方法,可以用来获取当前的实例对象。使用这个我们可以方便跟另一个属性进行对比。

RuleFor(customer => customer.Surname).Must((customer, surname) => surname != customer.Forename)

注意上面只是Must的示例,最佳实践应该是用NotEqual,

正则表达式验证器 Regular Expression Validator

确保指定属性的值与给定的正则表达式匹配. 列如:

RuleFor(customer => customer.Surname).Matches("some regex here");

示例错误:'Surname' 的格式不正确。 通常我们也需要用WithMessage来自定义验证消息

占位符:

  • 待验证属性的名称
  • 属性的当前值
  • – 我们相要匹配的正则表达式

电子邮件验证器 Email Validator

确保指定属性的值是有效的电子邮件地址格式。 列如:

RuleFor(customer => customer.Email).EmailAddress();

示例错误: 'Email' 不是有效的电子邮件地址。

占位符:

  • 待验证属性的名称
  • 属性的当前值 电子邮件地址验证器可以在两种模式下工作。 默认模式仅执行简单的检查,即可确定字符串中是否包含“ @”符号,该符号不在字符串的开头或结尾。 这是故意进行的幼稚的检查,以匹配ASP.NET Core的行为,后者会执行相同的检查 背后的原因, 看 Issue:EmailAddressAttribute

Issue里的评论

“The check is intentionally naive because doing something infallible is very hard. The email really should be validated in some other way, such as through an email confirmation flow where an email is actually sent. The validation attribute is designed only to catch egregiously wrong values such as for a U.I.”

或者,您可以使用旧的电子邮件验证行为,该行为使用与ASP.NET的.NET 4.x版本一致的正则表达式。 您可以通过调用在FluentValidation中使用此行为。 请注意,不建议使用此方法,因为不建议使用基于正则表达式的电子邮件验证。

RuleFor(x => x.Email).EmailAddress(EmailValidationMode.Net4xRegex)

信用卡验证器 Credit Card Validator

检查字符串属性是否是有效的信用卡号。

列如:

RuleFor(x => x.CreditCard).CreditCard(); // creditCard为空或者null是可以通过验证的

示例错误: 'Credit Card' 不是有效的信用卡号。

占位符:

  • 待验证属性的名称
  • 属性的当前值

枚举验证 Enum Validator

检查一个数值是否是有效的枚举值. 这用于防止将非法的数值强制转换为枚举类型。 列如: 下面的场景是有可能的

public enum ErrorLevel 
{
  Error = 1,
  Warning = 2,
  Notice = 3
}

public class Model
{
  public ErrorLevel ErrorLevel { get; set; }
}

var model = new Model();
model.ErrorLevel = (ErrorLevel)4;
// 编译的时候是不会出错, 但从技术上讲,此值4不适用于此枚举。  枚举验证器可以防止这种情况的发生。 

RuleFor(x => x.ErrorLevel).IsInEnum();

示例错误: 'Error Level' 的值范围不包含 '4'。

占位符:

  • 待验证属性的名称
  • 属性的当前值

枚举名验证器 Enum Name Validator

检查字符串是否为有效的枚举名称。

// 大小写敏感的检查  ErrorLevelName为空或者Null是可能过过验证的。
RuleFor(x => x.ErrorLevelName).IsEnumName(typeof(ErrorLevel));

// 大小写不敏感的检查
RuleFor(x => x.ErrorLevelName).IsEnumName(typeof(ErrorLevel), caseSensitive: false);

示例错误: 'Error Level Name' 的值范围不包含 'abc'。

占位符:

  • 待验证属性的名称
  • 属性的当前值

空验证器 Empty Validator

与NotEmpty验证器相反。 检查属性值是否为null或该类型的默认值。

RuleFor(x => x.Surname).Empty();

示例错误: 'Error Level Name' 必须为空。

占位符:

  • 待验证属性的名称
  • 属性的当前值

Null验证器 Null Validator

与NotNull验证器相反。 检查属性值是否为null。

RuleFor(x => x.Surname).Empty();

示例错误: 'Error Level Name' 必须为Null。

占位符:

  • 待验证属性的名称
  • 属性的当前值

数字范围 不包含 验证器 ExclusiveBetween Validator

检查属性值是否在两个指定数字之间的范围内(不包含)。

RuleFor(x => x.Age).ExclusiveBetween(5, 90);

示例错误: 'Age' 必须在 5 (不包含)和 90 (不包含)之间, 您输入了 3。

占位符:

  • 待验证属性的名称
  • 属性的当前值
  • –范围的下限
  • –范围的上限

数字范围 包含 验证器 InclusiveBetween Validator

检查属性值是否在两个指定数字之间的范围内(包含)。

RuleFor(x => x.Age).InclusiveBetween(5, 90);

示例错误: 'Age' 必须在 5 (包含)和 90 (包含)之间, 您输入了 3。

占位符:

  • 待验证属性的名称
  • 属性的当前值
  • –范围的下限
  • –范围的上限

小数位数精度验证器 ScalePrecision Validator

检查decimal值是否具有指定的小数位数和精度。

RuleFor(x => x.Amount).ScalePrecision(2, 4);
//  Amount = 1.222222m

示例错误::'Amount' 总位数不能超过 4 位,其中小数部分 2 位。您共计输入了 1 位数字,其中小数部分6 位。

占位符:

  • 待验证属性的名称
  • 属性的当前值
  • – 期待的精度
  • – 期待的小数位数
  • – 总位数
  • – 实际小数位数 注意 这个方法还有一个额外的可选参数 ignoreTrailingZeros (忽略尾部的0) 默认情况下是false.
// Amount = 1.221000m,

RuleFor(x => x.Amount).ScalePrecision(2, 4, true);

错误消息: 'Amount' 总位数不能超过 4 位,其中小数部分 2 位。您共计输入了 1 位数字,其中小数部分3 位。 可以看到 0已经被忽略了

最近更新的
...