【问题标题】:Validating a custom date format in with laravel validator使用 laravel 验证器验证自定义日期格式
【发布时间】:2018-10-21 14:31:45
【问题描述】:

在我的应用程序中,用户从日期选择器中选择日期,然后日期以对应用户区域设置的格式显示在输入中。

提交表单时,我想验证相应的日期,但是验证器不知道提交日期的日期格式。

我的问题是我是否应该在将日期传递给验证器之前将其更改为 Y-m-d 还是有办法告诉验证器正确的验证格式?

【问题讨论】:

  • 您可以尝试只使用date 规则,如果不是,我建议在验证之前将其更改为Y-m-dlaravel.com/docs/5.6/validation#rule-date
  • 如果您在日期选择器中使用input[type="date"],则传递的值将始终为Y-m-d

标签: php laravel laravel-5


【解决方案1】:

更简单的选择是使用 Laravel date_format:format 规则 (https://laravel.com/docs/5.5/validation#rule-date-format)。它是 Laravel 中的内置函数,无需自定义规则(在 Laravel 5.0+ 中可用)。

你可以这样做:

$rule['date'] = 'required|date_format:d/m/Y';

$rule['date'] = 'required|date_format:Y-m-d';

【讨论】:

    【解决方案2】:

    Laravel Custom Validation Rules

    您可以在AppServiceProvider 中定义多格式日期验证

    class AppServiceProvider extends ServiceProvider  
    {
      public function boot()
      {
        Validator::extend('new-format', function($attribute, $value, $formats) {
    
          foreach($formats as $format) {
    
            $parsed = date_parse_from_format($format, $value);
    
            // validation success
            if ($parsed['error_count'] === 0 && $parsed['warning_count'] === 0) {
              return true;
            }
          }
    
          // validation failed
          return false;
        });
      }
    }
    

    现在您可以使用自定义验证规则:

    'your-date' => 'new-format:"Y-m-d H:i:s.u","Y-m-d"'

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-05
      • 2018-09-09
      • 2016-03-27
      • 2019-03-18
      • 2018-06-11
      相关资源
      最近更新 更多