バリデーションルールの処理について

例えば、requiredというルールを設定すると必須項目かどうかをバリデートできます。この条件は公式ドキュメントにも書いてありますが、実際にどういうコードなのか気になりました。それと同時に他のルールもどういう処理なのか調べて見ました。

Laravelのバージョンは5.3.28です。

また、メソッドのみを紹介しますが本来はIlluminate\Validation\Validator.phpという1つのファイルにまとまっています。

バリデーションルールは多いので5回に分けて、アルファベット順で書いていこうと思います。

今回調べたルール

  • accepted
  • active_url
  • after:date
  • alpha
  • alpha_dash
  • alpha_num
  • array
  • before:date
  • between
  • boolean

accepted

入力された値が、条件1と条件2がともにtrueの場合にtrueを返します。

条件1は$this->validateRequired()がtrueを返すことです。

これは後々出てくるrequiredのことです。

条件2は入力した値が以下の時です。

  • 文字列のyes
  • 文字列のon
  • 文字列の1
  • 数字の1
  • 論理型のtrue
  • 文字列のtrue

in_arrayの第3引数がtrueなので、型も確認する厳密な比較になります。

active_url

  • is_stringで文字列かどうか判断する
  • parse_urlでURLのホスト名を取得する
  • dns_get_recordでホスト名をIPv4アドレスかIPv6アドレスかを判断する
  • dns_get_recordの戻り値は配列なので、countで0より大きいならtrue

要するに、http://example.comの形でtrueになります。パスで区切られていようがクエリパラメータがあろうがこの形でtrueになります。それ以外は全てfalseを返します。

after:date

指定の日付以降であればtrueを返します。

例えば、「明日以降」ならafter:tomorrowとなり、「今日以降」ならafter:todayとなります。

その他、指定できる日付文字列はこのページの日付に基づいた表記の書式を参照してください。

また、他の日付のフィールドとの比較もできます。

上記の例では、入力したfinish_dateはstart_date以降の日付でないとバリデーションエラーになります。

alpha

文字列が全てアルファベットかどうか判断します。

※日本語はtrueを返すので、カスタムバリデーションを作成して対応しましょう。

alpha_dash

文字列が全てアルファベット、ダッシュ、アンダースコアかどうか判断します。

※日本語はtrueを返すので、カスタムバリデーションを作成して対応しましょう。

alpha_num

文字列が全てアルファベットと数字かどうか判断します。

alpha_dashとはpreg_matchの正規表現の部分が微妙に違っています。

※日本語はtrueを返すので、カスタムバリデーションを作成して対応しましょう。

array

フィールドが配列かどうか判断します。

before:date

指定の日付より前であればtrueを返します。

使い方はafter:dateと同じです。

between:min,max

指定された最小値と最大値の間かとうか判断します。

以下のようにして使います。

この例だとフィールドが1以上5以下ならtrueとなります。

また、ファイルサイズもバリデートできます。

boolean

入力された値が以下の値かどうか判断します。

  • 論理型のtrue
  • 論理型のfalse
  • 数字の0
  • 数字の1
  • 文字列の0
  • 文字列の1

in_arrayの第3引数がtrueなので、型も確認する厳密な比較になります。

バリデーションルールその1のまとめ

今回紹介したルールの中では、acceptedやbetweenはよく使いそうです。あとは、after:dateとbefore:dateくらいでしょうか。

alpha系に関しては日本語が通っちゃうのでカスタムする必要がありますね。