You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FluentValidation IRuleBuilderOptions扩展如何仅在值存在时运行正则校验

实现方案

完全可以把判断逻辑封装到扩展方法内部,无需每次调用时手动追加When条件,改造后的扩展方法代码如下:

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")
           .When((_, phoneNumber) => !string.IsNullOrEmpty(phoneNumber));

说明

  • 上述代码使用了FluentValidation中When方法的重载,可直接获取当前待校验的属性值,不需要从根模型中重复读取手机号字段,扩展方法的通用性不受影响,可直接复用到其他模型的手机号字段校验场景
  • 改造后原有调用逻辑无需任何改动,直接使用RuleFor(contact => contact.PhoneNumber).MatchPhoneNumber()即可:当手机号为null或空字符串时,规则会自动跳过,仅当字段有值时才执行格式校验
  • 如果你需要同时要求手机号为必填项,只需要在调用时额外追加.NotEmpty()规则即可,和当前扩展方法的逻辑互不冲突

内容的提问来源于stack exchange,提问作者Ryan Buening

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 12:27:02