Laravel 8表单请求验证如何配置出生日期满18年的校验规则
Laravel 8 出生日期满18周岁验证规则调整方案
原验证代码:
public function rules() { return [ 'birth_date' => [ 'required', 'before: date("Y-m-d")' ], ]; }
你只需要把before规则替换为before_or_equal,参数传入距今18年前的日期即可,调整后的代码如下:
public function rules() { return [ 'birth_date' => [ 'required', 'date', // 新增日期格式校验,避免非法格式导致校验异常 'before_or_equal:' . now()->subYears(18)->toDateString() ], ]; }
规则说明
- 用
now()助手函数生成当前时间实例,调用subYears(18)减去18年,再转为Y-m-d格式的日期字符串作为校验阈值 - 用
before_or_equal替代before,可以覆盖当天刚好满18周岁的场景,避免合法日期被误拦截 - 如果你不想用Carbon类,也可以用原生PHP方法生成阈值日期,写法为:
'before_or_equal:' . date('Y-m-d', strtotime('-18 years'))
注意事项
- 要保证前端传入的
birth_date格式为Y-m-d,和校验阈值的格式保持一致,避免格式不匹配导致校验失效 - 若需要支持其他日期格式,可以搭配
date_format:你的格式规则一起使用
内容的提问来源于stack exchange,提问作者mikefolu
相关产品推荐
相关产品推荐

