有一个简单的问题,请帮我解决。我想验证日期格式(dd/mm/yyyy)。 如果我的输入是05/02/1991或5/2/1991,它应该返回'true',但是
public function rules()
{
return [
'date_of_birth' => 'required|date_format:"d/m/Y"'
];
}
在上述规则中,它仅返回对于 05/02/1991 的 true。我需要匹配它们两个。
有一个简单的问题,请帮我解决。我想验证日期格式(dd/mm/yyyy)。 如果我的输入是05/02/1991或5/2/1991,它应该返回'true',但是
public function rules()
{
return [
'date_of_birth' => 'required|date_format:"d/m/Y"'
];
}
日期
和正则表达式
来处理,因为date_format
只能处理一种格式:<?php
public function rules()
{
return [
'date_of_birth' => 'required|date|regex:/\d{1,2}\/\d{1,2}\/\d{4}/'
];
}
date
验证器只接受一个日期格式作为参数。如果要使用多个格式,您需要构建自定义验证规则。这很简单。为了能够在单个验证器中使用多个日期格式,您可以在AppServiceProvider中定义多格式日期验证,具体代码如下:
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
Validator::extend('date_multi_format', function($attribute, $value, $formats) {
// iterate through all formats
foreach($formats as $format) {
// parse date with current format
$parsed = date_parse_from_format($format, $value);
// if value matches given format return true=validation succeeded
if ($parsed['error_count'] === 0 && $parsed['warning_count'] === 0) {
return true;
}
}
// value did not match any of the provided formats, so return false=validation failed
return false;
});
}
}
'date' => 'date_multi_format:"Y-m-d H:i:s.u","Y-m-d"' //or any other format
我遇到了一个类似的问题,其中一些表单使用时间选择器,而其他表单则使用<input type="time">
。后者无论浏览器中使用的格式如何,都会格式化为24小时制。
继@Foysal的答案之后,现在您还可以创建一个Rule对象来定义您的规则,而不必扩展验证器。
@see https://laravel.com/docs/8.x/validation#using-rule-objects
运行php artisan make:rule DateMultiFormat
然后在位于app/Rules
的新Rule对象中,您可以添加相同的逻辑。
在构造函数中接受可接受的格式,然后在passes()
方法中添加逻辑。
foreach ($this->acceptedFormats as $format) {
$parsed = date_parse_from_format($format, $value);
if ($parsed['error_count'] === 0 && $parsed['warning_count'] === 0) {
return true;
}
}
return false;
而在您的验证器类中...
public function rules()
{
return [
'date' => [
'required', // or whatever
new DateMultiFormat(['m/d/Y', 'Y-m-d']),
],
...
];
try {
$start = Carbon::createFromFormat('m/d/Y g:i A', $startString, $locationTimeZone);
} catch (InvalidFormatException $e) {
$start = Carbon::createFromFormat('m/d/Y H:i', $startString, $locationTimeZone);
}
请将此验证与您的验证进行比较
public function rules()
return [
'date_of_birth' => 'required|date_format:m/d/Y'
];
}