gpt4 book ai didi

c# - FluentValidation IRuleBuilderOptions 扩展方法 - 仅在值存在时运行正则表达式验证器

转载 作者:行者123 更新时间:2023-12-03 08:16:15 29 4
gpt4 key购买 nike

我有以下 FluentValidation 扩展方法来验证电话号码:

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()

但是,我只希望扩展方法在电话号码字符串不为空/空时验证电话号码。我可以通过执行以下操作来做到这一点:

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");
}

您是否使用不同的方式来定义验证器?

关于c# - FluentValidation IRuleBuilderOptions 扩展方法 - 仅在值存在时运行正则表达式验证器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69275085/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com