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

如何验证表单请求中的日期?day字段补零验证失效问题

解决Day字段严格格式验证问题

嘿,我懂你遇到的这个坑——date_format:"d"这个验证规则其实没你想的那么严格!它底层依赖PHP的DateTime::createFromFormat方法,这个方法会自动把单数字的日期(比如1)补成两位的01,所以输入1的时候会被当成合法值通过验证,但这完全不符合你要的「必须是两位数字、1-9日必须是01-09」的要求。

给你两个靠谱的解决方案:

方案一:用正则表达式严格匹配

直接用正则来限定格式和范围,这是最直接的方式:

'day' => 'required|regex:/^(0[1-9]|[12][0-9]|3[01])$/'

这个正则的逻辑拆解一下:

  • 0[1-9]:匹配01到09的两位数字
  • [12][0-9]:匹配10到29的两位数字
  • 3[01]:匹配30和31这两个合法的月末日期

方案二:自定义Laravel验证规则

如果你的项目里经常需要这种验证,可以自定义一个规则,更优雅也更复用:

  1. 生成自定义规则文件:
php artisan make:rule TwoDigitDay
  1. 在生成的TwoDigitDay类的passes方法里写验证逻辑:
public function passes($attribute, $value)
{
    // 首先检查是否是两位数字
    if (!preg_match('/^\d{2}$/', $value)) {
        return false;
    }
    // 再检查数值范围在1-31之间
    $day = (int)$value;
    return $day >= 1 && $day <= 31;
}
  1. 然后在验证规则里使用这个自定义规则:
'day' => 'required|app\Rules\TwoDigitDay'

这样就能完全满足你的要求:必须是两位数字,1-9日只能是01-09,范围01-31。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:33:49