laravel 中的生日日期范围验证问题

问题描述

嗨,我正在尝试验证我的出生日期字段验证

我需要的年龄范围必须是 18-45 岁

我尝试了以下规则,但无法正常工作。

'date_of_birth_tcp2'=>'required|date|before:18 years|after:45 years'

解决方法

您可以使用自定义验证或如评论中所述来实现此目的。

'date_of_birth_tcp2'=>['required','date',function ($attribute,$value,$fail) {
        
        $age=Carbon::parse($value)->diff(Carbon::now())->y;
        //$age=Carbon::createFromFormat('d/m/Y',$value)->diff(Carbon::now())->y;
        if($age<18||$age>45){
            $fail('The '.$attribute.' is invalid.');
        }
       
    },]
,

在您的 app/Providers/AppServiceProvider 中创建自定义验证规则:

public function boot() {
    Validator::extend('valid_date_range',$parameter,$validator) {
        $dob = Carbon::parse($value)->diff(Carbon::now())->y;

        if($dob < 18 || $dob > 45) {
            return $fail('The given '.$attribute.' is invalid.');
        }
    });
}

要使用此规则:

$this->validate([
    'date_of_birth_tcp2' => 'valid_date_range:date_of_birth,3',]);