【问题标题】:Laravel date_format validation failing for HTML input type weekHTML 输入类型周的 Laravel date_format 验证失败
【发布时间】:2021-08-09 17:09:23
【问题描述】:

我从请求中得到了这些数据:

{
    "type": "custom",
    "start_week": "2020-W19"
}

我的验证规则是:

    return [
        'type' => 'required|in:standard,custom',
        'start_week' => 'required|date_format:Y-\WW',
    ];

这给了我这个结果:

"errors": {
    "start_week": [
        "The start week does not match the format Y-\\WW."
    ]
}

我之前使用这种格式来验证周类型输入,例如“2020-W19”。

我做错了什么,我该怎么办?

【问题讨论】:

  • 第一个W一定要转吗?
  • @shaedrich 是的,否则它将获得周数而不仅仅是字母;第一个 W 只是格式中的字母,第二个 W 是周数。

标签: laravel laravel-8 laravel-validation


【解决方案1】:

我试过了。你的权利。令人惊讶的是它不起作用。

但这里有一种方法可以处理它。通过直接使用闭包Carbon实例,我们可以拥有自己的自定义规则,它可以正常工作:

$request->validate([
    'start_week' => [
        'required',
        function ($attribute, $value, $fail) {
            if (!Carbon\Carbon::hasFormat($value, 'Y-\WW')) {
                $fail('The '.$attribute.' is invalid.');
            }
        },
    ]
]);

更多信息:Doc

【讨论】:

  • 是的,我同意,令人惊讶和不幸。好吧,这很好用,但我只是想知道我是否可以用 Rule 门面做类似的事情,我已经看到它在“in”规则中的用法。
  • 当然可以。我们有rule object ,它为您提供简单、干净和强大的方式来实施您的规则。 laravel.com/docs/8.x/validation#using-rule-objects
  • 酷!我想,唯一不错的替代方法是使用“正则表达式”规则。
  • 没错:)
猜你喜欢
  • 2019-06-25
  • 2018-03-02
  • 1970-01-01
  • 2015-10-12
  • 2015-07-30
  • 1970-01-01
  • 2011-05-11
  • 1970-01-01
  • 2018-06-08
相关资源
最近更新 更多