使用laravel验证器验证自定义日期格式

jac*_*bdo 10 php laravel laravel-5

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

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

我的问题是我是否应该在将日期传递给验证器之前将日期变为Ymd,还是有一种方法可以告诉Validator正确的格式进行验证?

Nir*_*hah 27

更简单的选择是使用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';
Run Code Online (Sandbox Code Playgroud)

要么

$rule['date'] = 'required|date_format:Y-m-d';
Run Code Online (Sandbox Code Playgroud)


Sau*_*abh 6

Laravel 自定义验证规则

您可以在您的 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;
    });
  }
}
Run Code Online (Sandbox Code Playgroud)

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

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