我有许多表单字段,例如电话号码和邮政编码,可以留空。但是,当它们被填写时,我希望它们符合严格的格式规则。
我希望使用Fluent Validation来完成此任务,但我尚未找到可以执行以下操作的任何内容:
RuleFor(x => x.PhoneNumber)
.Matches(@"^d{3}-d{3}-d{4}$")
.When(x => x.PhoneNumber.Length != 0)
.WithMessage("Phone number must be a valid 10-digit phone number with dashes, in the form of “123-456-7890”")
.Length(12, 12).When(x => x.PhoneNumber.Length >= 1).WithMessage("Phone number must be in the form of “123-456-7890”");
现在,这两个都抛出"对象引用未设置为对象的实例"错误。
我说得有意义吗,或者这甚至不可能通过FluentValidation实现吗?
我认为您在尝试计算长度PhoneNumber
属性时会得到"对象引用未设置为对象的实例"。首先,您需要检查它是否不为 null,然后才应用所有其他规则。除了您在Matches(@"^d{3}-d{3}-d{4}$")
中使用的正则表达式之外,它还包含长度验证,因此您可以安全地删除
.Length(12, 12).When(x => x.PhoneNumber.Length >= 1).WithMessage("Phone number must be in the form of “123-456-7890”");
如果删除长度规则,类似这样的东西应该可以工作:
When(x => x.PhoneNumber != null,
() => {
RuleFor(x => x.PhoneNumber).Matches(@"^d{3}-d{3}-d{4}$")
.WithMessage("Phone number must be a valid 10-digit phone number with dashes, in the form of “123-456-7890”");
});