Laravel バリデーションの指定方法

オブジェクト指向

| 存在チェック

用語 使用例 説明
required required 入力必須
present present フィールドが存在しているかどうか(存在していれば空でも許す)
nullable nullable nullableな内容を許容する
filled filled フィールドが存在する場合は空でないかどうか(存在していなければ許す)
in in:foo,bar 指定されたリストの中の値に含まれているかどうか(例だとfooかbarが値ならOK)
not_in not_in:foo,bar inの含まれない版
in_array in_array:別のフィールド フィールドの中身が別のフィールドの値のどれかであるかどうか

| 型チェック関連

論理値

用語 使用例 説明
boolean boolean 論理値かどうか(文字列の1や0も含む)
accepted accepted yes,on, 1, trueのどれかであるかどうか

文字列判定

用語 使用例 説明
string string 文字列であるかどうか
alpha alpha 中身が全部英字かどうか*1
alpha_dash alpha_dash 英字または-または_であるかどうか*1
alpha_num alpha_num 英数字であるかどうか*1
email email メールアドレスの形式であるかどうか*2
url url URLの形式であるかどうか(filter_var)
active_url active_url URLが有効かどうか(checkdnsrr)
ip ip ipアドレスの形式かどうか
json json json文字列であるかどうか
timezone timezone タイムゾーンの文字列であるかどうか(timezone_identifiers_list)
regex regex:正規表現 正規表現にマッチするかどうか。正規表現にパイプが含まれるときはパイプ不可
uuid uuid フィールドがUUIDの形式にマッチしているかどうか

 

日付判定

用語 使用例 説明
date date 日付かどうか(strtotime)
date_format date_format:”Y-m-d” 日付フォーマットが一致しているかどうか。dateと一緒には使えない
after after:tomorrow
after:start_date
対象の日付以降かどうか(strtotime)。他のフィールドとも比較可能
before before:today ↑の日付以前ばーじょん

afterとかbeforeは期間指定とかするときに役立ちそう

数値判定

用語 使用例 説明
integer integer 整数かどうか
numeric numeric 数値かどうか(is_numeric)
digits digits:2 数値であり、値の桁数であるかどうか(例では2桁)
digits_between digits_between:1,5 数値であり、桁数が最小値から最大値の間かどうか(例だと1~5桁)

配列判定

用語 使用例 説明
array array 配列かどうか
distinct distinct 対象が配列のときに重複がないかどうか

| 大きさ判定

用語 使用例 説明
size size:20 指定された値であるかどうか。文字列の場合は文字長で数値なら整数値、ファイルならキロバイトのサイズ。
min min:1 指定された値以上かどうか。文字にも数値にもファイルにも使える
max max:5 指定された値以下かどうか。文字にも数値にもファイルにも使える
between between:1,5 最小値から最大値の間のサイズかどうか。文字にも数値にもファイルにも使える

| 比較判定

比較判定系のバリデーションはすでにマージされていて、minやmaxなどと異なる点は、比較判定系は同じ型であることが要求され、フィールド名を指定することも可能である点です。

用語 使用例 説明
gt gt:数値またはフィールド名 対象の数値より大きいかどうか(>)
gte gte:数値またはフィールド名 対象の数値以上かどうか(>=)
lt lt:数値またはフィールド名 対象の数値より小さいかどうか(<)
lte lte:数値またはフィールド名 対象の数値以下かどうか(<=)

| ファイル判定

用語 使用例 説明
file file ファイルであるかどうか
image image ファイルが画像かどうか(jpg,png,bmp,gif,svg)
dimensions dimensions:パラメータ バリデーションする画像がパラメータに指定されたサイズに一致するか(min_width,max_width,min_height,max_height,width,height,raito)
mimes mimes:jpg,png ファイルが指定された拡張子かどうか

dimensionsは5.4からルールの指定をコードでやることも可能。
(Rule::dimensions()->maxWidth(1000)->maxHeight(500)->ratio(3 / 2))

| 同値チェック

用語 使用例 説明
confirmed confirmed フィールド名_confirmationフィールドと同値であるかどうか
same same:フィールド名 指定したフィールドと同じ値であるかどうか
different different:フィールド名 指定フィールドと値が異なるかどうか

| その他

exists

例1: exists:states
上記の場合は、statesテーブルのフィールド名カラムにフィールドの値が存在することを確認します。なので、"state" => "exists:states"という指定の場合はstatesテーブルのstateカラムということになります。

例2: exists:states,abbreviation
上記の場合は、statesテーブルのabbreviationカラムにフィールドの値が存在することを確認します。

例3: exists:staff,email,account_id,1
staffテーブルのaccount_idが1であるレコードのemailカラムにフィールドの値が存在することを確認します。(つまりwhereです)
1の部分は!を使って条件否定も出来たり、NULLやNOT_NULLの指定も可能です。

例4: Ruleクラス(Existsクラス)を利用した書き方

例3のようになってくると、コード化しておいたほうがわかりやすいのでこちらを使うほうが良いでしょう。

 
use IlluminateValidationRule;

Validator::make($data, [
    'email' => [
        'required',
        Rule::exists('staff')->where(function ($query) {
            $query->where('account_id', 1);
        }),
    ],
]);

unique

uniqueは一意であることを確認します。existsとほとんど変わりません。

よくある例は、"email" => "unique:users,email_address"みたいな感じですね。
なお、バリデータは基本的にデフォルトのデータベース接続を行うのでもしも指定したい場合はunique:connection名.usersのようにするみたいです。

existsと違う点は第3パラメータ以降です。existsでは第3パラメータ以降はwhereだったのですが、uniqueの場合は違います。
uniqueの場合、第3パラメータには除外したいIDを指定します。これがある理由は、自身の情報を更新している際にuniqueチェックが入ってしまうとエラーになってしまうからです。
(email以外のフィールドを更新しているのに、emailもformに渡された結果、validationの際にuniqueチェックで失敗する)

また、第4引数には第3引数を適用するカラム名を指定できます。デフォルトではidが指定されています。

この第3、4パラメータを除いて、whereを書くには以下のようにする必要があります。

 
'email' => 'unique:users,email,NULL,id,account_id,1'

訳:usersテーブルでidカラムがnullの物を除き、account_idが1の物でemailカラムがフィールドの値に存在しないことを確認します。(select count(id) from users where id is not null and account_id = 1 and email = ?みたいな感じだと思われ)

また、5.3以降ではRuleクラス(Uniqueクラス)を利用した書き方も出来ます。

 
use IlluminateValidationRule;

Validator::make($data, [
    'email' => [
        'required',
        Rule::unique('users')->ignore($user->id),
    ],
]);

required_ifとrequired_unless

例1:required_if:state,0
例2:required_if:flag,1,2

flagフィールドに1または2を持っている場合に、このフィールドが入力されているかを確認します。(例2)unlessの場合は持っていない場合に確認します。

required_withとrequired_with_all

例: required_with:foo,bar

fooまたはbarフィールドが存在している場合だけ、このフィールドが入力されているかを確認します。with_allは指定されているフィールド全てが存在している場合です。

required_withoutとrequired_without_all

上記のrequired_with,with_allの逆バージョンです。存在しない時に入力チェックが走ります。

今後、気づき都度次第メンテナンスしていこうと思ってます

タイトルとURLをコピーしました