【问题标题】:Laravel 5.6 Date of Birth Validation [duplicate]Laravel 5.6 出生日期验证 [重复]
【发布时间】:2022-01-13 01:25:23
【问题描述】:

我在不需要出生日期的会员模型中创建了验证规则。但是,当有人填写他们的出生日期时,我希望它是 1. 以正确的格式和 2. 日期不能是将来的日期。

但是,当我填写表格并将出生日期留空时,我仍然收到以下错误:

这是我的基本 Member.php 模型:

use Esensi\Model\Model;

class Member extends Model
{
    protected $rules = [
        'name' => 'required|alpha|min:2|max:255',
        'surname' => 'required|alpha|min:2|max:255',
        'id_number' => 'required|unique:members,id_number|digits:13',
        'mobile_number' => 'required|digits:10',
        'email' => 'required|email',
        'date_of_birth' => 'date_format:Y-M-D|before:today',
    ];
}

这是我的 MemberController.php 存储函数:

public function store(Request $request) 
{
    $member = new Member;
    $member->name = $request->name;
    $member->surname = $request->surname;
    $member->id_number = $request->id_number;
    $member->mobile_number = $request->mobile_number;
    $member->email = $request->email;
    $member->date_of_birth = $request->date_of_birth;

    if(!$member->save()){
        $errors = $member->getErrors();

         return redirect()
            ->action('MemberController@create')
            ->with('errors', $errors)
            ->withInput();
}
//successful creation
    return redirect()
        ->action('MemberController@index')
        ->with('message', '<div class="alert alert-success">Member Created Successfully!</div>');

}

如何解决这个问题,让出生日期仅在字段实际填写但格式不正确时才显示错误?

【问题讨论】:

  • 试试'date_of_birth' =&gt; 'date_format:Y-M-D|before:today|nullable',
  • @jproux 尝试使用 'y-m-d' 而不是 'Y-M-D'

标签: php laravel


【解决方案1】:

您将在此处找到适用于不同条件的date 规则:

$v = Validator::make(
  ['start_date' => date('30-05-2028')], // input
  [
    'date_of_birth' => ['before:5 years ago'],
    'start_date'    => 'required|date_format:d-m-Y|after:8 years',
    'end_date'      => 'date_format:d-m-Y|after:start_date', 
    ]
);

if ($v->passes())
 dd('Your Date format is correct.');
else
 dd($v->errors());

对于您的情况,您应该尝试:

'date_of_birth' => 'date_format:Y-m-d|before:today|nullable'

小心:您必须使用这种Y-m-d 格式。不是这个Y-M-D。 月份和日期参数必须小写。希望它能解决你的问题。

【讨论】:

    【解决方案2】:
    'date_of_birth' => 'nullable|date_format:Y-m-d|before:today',
    

    【讨论】:

      【解决方案3】:

      只是一个额外的想法......

      我向 date_of_birth 添加了 nullable,然后得到一个 SQL 错误,指出 date_of_birth 不允许为 null。我忘记将列设置为允许在我的架构中使用空值

      谢谢,建议有帮助

      【讨论】:

        【解决方案4】:

        我认为更简单的方法是

        'date_of_birth' => 'required|date|date_format:Y-m-d|before:'.now()->subYears(18)->toDateString()
        

        假设有效年龄为 18 岁

        【讨论】:

        • 问题中没有任何地方提到有“有效年龄”的要求。
        • 这就是为什么我说假设有效年龄是 18 岁,以防有人想知道我为什么减去 18 岁..
        猜你喜欢
        • 2022-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多