FluentValidation IRuleBuilderOptions 扩展方法 - 如果值存在,仅 运行 正则表达式验证器
FluentValidation IRuleBuilderOptions extension method - only run regex validator if value exists
我有以下 FluentValidation 扩展方法来验证 phone 个数字:
public static IRuleBuilderOptions<T, string> MatchPhoneNumber<T>(this IRuleBuilder<T, string> rule)
=> rule.Matches(@"^(1-)?\d{3}-\d{3}-\d{4}$").WithMessage("Invalid phone number");
我称之为:
RuleFor(contact => contact.PhoneNumber).MatchPhoneNumber()
但是,我只希望扩展方法在 phone 数字字符串不是 null/empty 时验证 phone 数字。我可以通过执行以下操作来做到这一点:
RuleFor(contact => contact.PhoneNumber)
.MatchPhoneNumber()
.When(contact => !string.IsNullOrEmpty(contact.PhoneNumber));
但是我可以在扩展方法本身中做到这一点吗?
您可以更改正则表达式以接受空字符串,如下所示:
^$|^(1-)?\d{3}-\d{3}-\d{4}$
但是,我已经尝试了最新版本的 FluentValidation (10.3.3),如果您将 null 或空字符串传递给 Matches
规则,它不会给出任何错误。在我的示例代码中,尽管 PhoneNumber 为 Null:
,但我没有在结果中得到任何错误
class Program
{
static void Main(string[] args)
{
var contact = new Contact();
var contactValidator = new ContactValidator();
var result = contactValidator.Validate(contact);
Console.WriteLine(result.IsValid); // This returns true with null phone number
}
}
public class Contact
{
public string PhoneNumber { get; set; }
}
public class ContactValidator : AbstractValidator<Contact>
{
public ContactValidator()
{
RuleFor(contact => contact.PhoneNumber)
.MatchPhoneNumber();
}
}
public static class Extensions
{
public static IRuleBuilderOptions<T, string> MatchPhoneNumber<T>(this IRuleBuilder<T, string> rule)
=> rule.Matches(@"^(1-)?\d{3}-\d{3}-\d{4}$").WithMessage("Invalid phone number");
}
您是否使用不同的方式来定义您的验证器?
我有以下 FluentValidation 扩展方法来验证 phone 个数字:
public static IRuleBuilderOptions<T, string> MatchPhoneNumber<T>(this IRuleBuilder<T, string> rule)
=> rule.Matches(@"^(1-)?\d{3}-\d{3}-\d{4}$").WithMessage("Invalid phone number");
我称之为:
RuleFor(contact => contact.PhoneNumber).MatchPhoneNumber()
但是,我只希望扩展方法在 phone 数字字符串不是 null/empty 时验证 phone 数字。我可以通过执行以下操作来做到这一点:
RuleFor(contact => contact.PhoneNumber)
.MatchPhoneNumber()
.When(contact => !string.IsNullOrEmpty(contact.PhoneNumber));
但是我可以在扩展方法本身中做到这一点吗?
您可以更改正则表达式以接受空字符串,如下所示:
^$|^(1-)?\d{3}-\d{3}-\d{4}$
但是,我已经尝试了最新版本的 FluentValidation (10.3.3),如果您将 null 或空字符串传递给 Matches
规则,它不会给出任何错误。在我的示例代码中,尽管 PhoneNumber 为 Null:
class Program
{
static void Main(string[] args)
{
var contact = new Contact();
var contactValidator = new ContactValidator();
var result = contactValidator.Validate(contact);
Console.WriteLine(result.IsValid); // This returns true with null phone number
}
}
public class Contact
{
public string PhoneNumber { get; set; }
}
public class ContactValidator : AbstractValidator<Contact>
{
public ContactValidator()
{
RuleFor(contact => contact.PhoneNumber)
.MatchPhoneNumber();
}
}
public static class Extensions
{
public static IRuleBuilderOptions<T, string> MatchPhoneNumber<T>(this IRuleBuilder<T, string> rule)
=> rule.Matches(@"^(1-)?\d{3}-\d{3}-\d{4}$").WithMessage("Invalid phone number");
}
您是否使用不同的方式来定义您的验证器?