【问题标题】:Birthday Date range validation issue in laravellaravel 中的生日日期范围验证问题
【发布时间】:2021-07-14 17:40:14
【问题描述】:

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

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

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

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

【问题讨论】:

  • 18年'date_of_birth_tcp2' => 'required|date|before_or_equal:'.\Carbon\Carbon::now()->subYears(18)->format('Y-m-d'),
  • 不,我的最小年龄必须是 18,最大年龄必须是 45,当我尝试应用您的规则时,它允许我提交 1900-10-21,我应该显示错误

标签: php laravel


【解决方案1】:

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

'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.');
        }
       
    },]

【讨论】:

  • 我试过了,2010-10-12,还是说 date_of_birth_tcp2 is invalid。我的日期格式是 YYYY-MM-DD
  • 是的,因为如果您考虑今天与提到的年份日期之间的差异,它还没有完成 18 年
【解决方案2】:

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

public function boot() {
    Validator::extend('valid_date_range', function ($attribute, $value, $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',
]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-06
    • 1970-01-01
    • 2016-03-15
    • 1970-01-01
    • 1970-01-01
    • 2019-06-09
    • 1970-01-01
    • 2021-05-11
    相关资源
    最近更新 更多