[英]Laravel 5.1 date_format validation allow two formats
我對傳入的 POST 請求使用以下日期驗證。
'trep_txn_date' => 'date_format:"Y-m-d H:i:s.u"'
這將只允許這種日期,即 2012-01-21 15:59:44.8
我還想允許沒有時間的日期,例如 2012-01-21,當發送到 mysql 數據庫時,它將自動存儲為 2012-01-21 00:00:00.0
有沒有辦法可以使用 Laravel 現有的驗證規則來做到這一點。 有沒有辦法在 date_format 規則中定義多種格式,如下所示。
'trep_txn_date' => 'date_format:"Y-m-d H:i:s.u","Y-m-d"' //btw this didn't work.
謝謝,
ķ
date_format驗證器僅使用一種日期格式作為參數。 為了能夠使用多種格式,您需要構建自定義驗證規則。 幸運的是,它非常簡單。
您可以使用以下代碼在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;
});
}
}
您可以稍后使用此新的驗證規則:
'trep_txn_date' => 'date_multi_format:"Y-m-d H:i:s.u","Y-m-d"'
您可以在此處詳細了解如何創建自定義驗證規則: http : //laravel.com/docs/5.1/validation#custom-validation-rules
jedrzej.kurylo 批准的答案已經過時,因為 Laravel 本身提供的date_format
規則現在可以采用多種格式。 實現與 jedrzej.kurylo 給出的基本相同:
(回答,因為我還沒有足夠的聲譽來發表評論。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.