php - 如何在 laravel 中验证多种格式的日期时间

标签 php laravel datetime

我想用多种格式检查我的请求日期时间,如下所示:

Y-m-d
Y-m-
Y-m

在 Laravel 中,我使用 Validator 来验证日期时间,但是 Validator 无法对多种格式进行检查。这是我的代码:

Validator::make(['date' => $departureDate], [
   'date' => 'required|date_format:Y-m-d, Y-m, Y-m-'
]);

我怎样才能在 laravel 中做到这一点 请帮我!非常感谢!

最佳答案

您必须为此编写自定义验证格式。 Laravel 的 date_format 只需要一个参数,无法处理多种格式。有两种方法可以添加自定义验证。首先,一个是制作一个规则存储库并在那里添加您的验证逻辑。 Here Taylor Otwell 解释了这种方法。

另一种方法是在应用程序服务提供商中扩展验证并在那里添加新规则。在应用服务提供商中添加此代码:

use Illuminate\Support\Facades\Validator;


Validator::extend('multi_date_format', function ($attribute, $value, $parameters,$validator) {

    $ok = true;

    $result = [];

      // iterate through all formats
      foreach ($parameters as $parameter){

         //validate with laravels standard date format validation
         $result[] = $validator->validateDateFormat($attribute,$value,[$parameter]);
      }

    //if none of result array is true. it sets ok to false
    if(!in_array(true,$result)){
        $ok = false;
        $validator->setCustomMessages(['multi_date_format' => 'The format must be one of Y-m-d ,Y-m or Y-m-']);
    }

    return $ok;
});

在这里你可以这样使用它:

$validator = Validator::make(['date' => '2000-02-01'], [
    'date' => 'required|multi_date_format:Y-m-d,Y-m,Y-m-'
]);

if($validator->fails()) {
    $errors = $validator->errors()->all();
}

关于php - 如何在 laravel 中验证多种格式的日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56352761/

相关文章:

php - 数组名称中的大括号变量,PHP

laravel - 与laravel homestead Vagrant 的份额

Laravel ffmpeg 编码失败未转换

php - Laravel - 使用 OR 运算符连接 2 个表

c# - 将纪元时间戳转换为东部时间并使用 Nodatime 反转的优雅方法

php - CURTIME() 获取服务器时间而不是 php.ini 中指定的时区

java - 从日期中删除日期名称并将其设置为仅 'yyyy-MM-dd HH:mm:ss'

php - MySQL 查询中的日期/时间错误

PHP/Apache : PHP Fatal error: Call to undefined function mysql_connect()

php - 如果没有启用javascript,用户如何知道提交成功?