如何在 Laravel 中使用多种格式验证日期时间

3

我想检查我的请求日期时间,有多种格式,类似下面这样的格式:

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 5.1 date_format验证允许两种格式的重复问题。 - Zendy
对于任何寻找当前 Laravel 版本答案的人,现在它已经默认支持了。例如:'start_at' => ['date_format:"m/d/Y g:i A", "Y-m-d\TH:i"', 'nullable'], - chrisan
2个回答

1
你必须编写一个自定义验证格式。Laravel的date_format只能接受一个参数,无法处理多种格式。有两种方法可以添加自定义验证。第一种是创建一个规则存储库并在其中添加验证逻辑。这里是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();
}

0

您可以在文件app/Providers/AppServiceProvider.php的boot方法中注册自定义验证器。

Validator::extend('several_date_format', function ($attribute, $value, $parameters,$validator) {
    foreach ($parameters as $parameter){
        if (!$validator->validateDateFormat($attribute,$value,[$parameter]))
           return false;
    }
    return true;
});

现在你可以使用它了

'your_date' => 'required|several_date_format:Y-m-d,...'

可选的,您可以在 resources/lang/en/validation.php 中添加自定义消息。

return [
   ...
   'several_date_format' => 'Error text'
   ...
]

我看到你漏掉了一些东西。你觉得将失败的情况放在数组$parameters的第一个位置怎么样? - Duy Trần

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接