【问题标题】:Carbon\Exceptions\InvalidFormatException Unexpected data found. Unexpected data found. Trailing data, error on laravel date format validationCarbon\Exceptions\InvalidFormatException 发现意外数据。发现意外数据。尾随数据,laravel 日期格式验证错误
【发布时间】:2021-11-20 17:14:48
【问题描述】:

在我基于 laravel 的应用程序中,更新用户帐户时,我试图验证生日字段。我的控制器的更新方法中有以下内容

$rules = [
    'date_of_birth'=>[
        'required',
        'date',
        'date_format:Y-m-d',
        function ($attribute, $value, $fail) {
            $age = Carbon::createFromFormat('Y-m-d', $value)->diff(Carbon::now())->y;
            if($age < 18 || $age > 70) {
                $fail('Âge invalide. l\'âge devrait être 18-70');
            }
        },
    ]
];

所以日期格式必须是 Y-m-d,年龄范围必须在 18-70 之间。

以下是我的表单域

<div class="col-md-6 ">
 {!! Form::text('date_of_birth', old('date_of_birth', $user->date_of_birth), array('placeholder' => 'Date of birth','class' => 'form-control txt_txt','id'=>'datepicker')) !!}
 <span toggle="#dob-field" class="fa fa-fw fa-calendar field-icon toggle-dob"></span>
 {!! $errors->first('date_of_birth', '<span class="help-block" role="alert">:message</span>') !!}
 </div>

但每当我尝试提交无效的日期格式时,例如 1995 年 12 月 18 日,它总是给我以下错误...

Carbon\Exceptions\InvalidFormatException
Unexpected data found. Unexpected data found. Trailing data 

如何解决此问题并验证日期格式并正确显示错误消息。

【问题讨论】:

  • 您应该使用&lt;input type="date"/&gt;,这将确保返回一致的格式,并允许网络浏览器使用其内置的日期选择器。

标签: php laravel php-carbon laravel-validation


【解决方案1】:

它同时检查所有的验证规则,这意味着即使Y-m-d 失败,它仍然会检查你的年龄限制。将bail 添加到您的验证规则中,以便在第一次失败时停止验证。

'date_of_birth'=>['bail', 'required','date', 'date_format:Y-m-d', function ($attribute, $value, $fail) {

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-03
    • 1970-01-01
    相关资源
    最近更新 更多