簡體   English   中英

Laravel 5.1 date_format 驗證允許兩種格式

[英]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 給出的基本相同:

https://github.com/laravel/framework/blob/9.x/src/Illuminate/Validation/Concerns/ValidatesAttributes.php#L495-L512

(回答,因為我還沒有足夠的聲譽來發表評論。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM