Rya*_*ing 2 c# fluentvalidation
我有以下 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");
Run Code Online (Sandbox Code Playgroud)
我称之为:
RuleFor(contact => contact.PhoneNumber).MatchPhoneNumber()
Run Code Online (Sandbox Code Playgroud)
但是,我只希望扩展方法在电话号码字符串不为空/空时验证电话号码。我可以通过执行以下操作来做到这一点:
RuleFor(contact => contact.PhoneNumber)
.MatchPhoneNumber()
.When(contact => !string.IsNullOrEmpty(contact.PhoneNumber));
Run Code Online (Sandbox Code Playgroud)
但有没有办法可以在扩展方法本身中做到这一点?
小智 5
您可以更改正则表达式以接受空字符串,如下所示:
^$|^(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");
}
Run Code Online (Sandbox Code Playgroud)
您是否使用不同的方式来定义验证器?
| 归档时间: |
|
| 查看次数: |
3905 次 |
| 最近记录: |