Laravelのバリデーションで使える標準ルール11選!

Laravel Laravel

Laravelのバリデーションで使える標準のルールで、よく使っているルールの11個について解説しています。
ここに上げているバリデーション以外の詳細は、公式のこちらに書いているので確認してみてください。

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

Laravelのバリデーションルールについて解説していきます。

必須チェック(required)

フォームの項目を必須にするにはrequiredを使用します。

$request->validate([
    'id' => 'required',
    'password' => 'required',
]);

このように設定すると、id・passwordの項目が必須になります。
エラーの場合は、下記のようにメッセージが表示されます。(※bladeにエラーを表示するタグが必要になります)
Laravelで必須(required)のバリデーションエラー

文字数の上限チェック(max)

フォームの項目に文字数の上限を設定するにはmaxを使用します。

$request->validate([
    'id' => 'max:5',
    'password' => 'max:8',
]);

このように設定すると、idは5文字までpasswordは8文字までの設定になります。

フロント側でmaxlengthを設定しておくと、このバリデーションにかかることはないです。
ですが、フロントのコードが変えられた場合などを想定して、付けておく方がいいです。

エラーの場合は、下記のようにメッセージが表示されます。
Laravelで文字数の上限(max)のバリデーションエラー

文字数の下限チェック(min)

フォームの項目に文字数の下限を設定するにはminを使用します。

$request->validate([
    'id' => 'min:3',
    'password' => 'min:5',
]);

このように設定すると、idは3文字以上の入力が必須で、passwordは5文字以上の文字数が入力必須の設定になります。
エラーの場合は、下記のようにメッセージが表示されます。
Laravelで文字数の下限(min)のバリデーションエラー

メールアドレスチェック(email)

emailを使うと、フォームの項目の内容がメールアドレスとして正しいかをバリデーションできます。

public function emailTest(Request $request)
{
    $request->validate([
        'mail_address' => 'email',
    ]);
}

このように設定すると、送られてきたリクエストのmail_addressパラメータの内容がメールアドレスとして正しいかをバリデーションします。
エラーの場合は、下記のようにメッセージが表示されます。メールアドレスではない文字列を入力しました!
Laravelでメールアドレスのバリデーションエラー

URL有効チェック(url)

urlを使うと、入力内容がURLとして正しいかをバリデーションできます。

public function urlTest(Request $request)
{
    $request->validate([
        'page_url' => 'url',
    ]);
}

このように設定すると、送られてきたリクエストのpage_urlパラメータのURLが正しいかをバリデーションします。

エラーの場合は、下記のようにメッセージが表示されます。
最初にURLではない文字列を入力して、その後にURLを入力してバリデーションを通過できるか試してみました。
Laravelでurlのバリデーションエラー

NULL許可する(nullable)

フォームの項目に入力がなくても問題ない場合はnullableを使います。
項目が入力されている場合のみバリデーションしたい場合に使用します。入力されていない場合は無視されるようになります。

public function nullableTest(Request $request)
{
    $request->validate([
        'id' => 'nullable|max:5',
    ]);
}

上記のように設定すると、入力されていない場合は無視してバリデーションしません。
入力されている場合のみ、他に設定されているバリデーションルールを使って、バリデーションします。

今回は入力されている場合は文字列数が5文字上限までのバリデーションを入れています。
最初に何も入れずに進むと、エラーにならずに通過します。次に6文字入れて進むとエラーになることが確認できました。
Laravelのバリデーションでnullableの確認

数値チェック(numeric)

numericを設定すると、数値かどうかをバリデーションすることができます。

public function numericTest(Request $request)
{
    $request->validate([
        'id' => 'numeric'
    ]);
}

上記のように設定すると、idのリクエストパラメータとして送られてきた値が数値でない場合にエラーにします。

下記のように最初に未入力で進んで、次に文字列を入れて進んでみました。これはどちらもエラーになります。
対象項目に数値のみ入力して進むと、エラーにならずに進むことができました。
Laravelでnumericのバリデーションエラー

正規表現チェック(regex:pattern)

regexを使用すると、正規表現にマッチするかをバリデーションします。

public function regexTest(Request $request)
{
    $request->validate([
        'id' => 'regex:/^[0-9]{3}-[0-9]{3}$/'
    ]);
}

上記のように設定すると、idのリクエストパラメータが正規表現にマッチしているかをバリデーションします。
正規表現にマッチしていない場合がエラーです。regexと書いた後に「:」の右側が正規表現になります。

今回は入力内容が「数値3桁 ハイフン 数値3桁」ではない場合にエラーになります。
下記のように最初に3桁の数値を入力して進むと、エラーになりました。次に「123-123」と正規表現にマッチする内容を入力すると、バリデーションを通過できました。
Laravelでregexのバリデーションエラー

確認入力チェック(confirmed)

confirmedを設定された項目がxxx_confirmation項目と同じかを確認します。
例えば、passwordconfirmedが設定されると、password_confirmation項目に同じものが入力されているかをバリデーションします。

public function confirmedTest(Request $request)
{
    $request->validate([
        'password' => 'confirmed:password'
    ]);
}

上記のように設定した場合は、フォームのpasswordpassword_confirmationの項目の内容が一致しない場合にエラーになります。
実際に間違えるとエラーになって、同じ内容を入力したらバリデーションが通過することが確認できました。
Laravelでconfirmedのバリデーションエラー

対象項目が入力されたときに、他の項目の必須チェック(required_with)

required_withを使うと、対象の項目が入力されたときに、指定項目の入力必須のバリデーションをすることができます。

public function requiredWithTest(Request $request)
{
    $request->validate([
        'password' => 'required_with:id'
    ]);
}

上記のように設定すると、id項目が入力された場合に、password項目が入力されていないとエラーになります。
required_withと書いた後に「:」の右側が入力対象の項目です。

今回の内容で確認すると、何も入力せずに進むと、バリデーションを通過します。
id項目に値を入力して進もうとすると、passwordが入っていないのでエラーになりました。
Laravelでrequired_withのバリデーションエラー

入力された内容が一意チェック(unique)

uniqueを使うと、対象の項目がデータベースの項目と重複していないかをチェックします。

public function uniqueTest(Request $request)
{
    $request->validate([
        'id' => 'unique:users,id'
    ]);
}

上記のように設定すると、id項目がusersテーブルのidカラムに存在する値かどうかを確認します。
存在する値の場合にエラーになります。

uniqueを書いた後に「:」を書いて「テーブル名,カラム名」で定義します。
後はバリデーション時にLaravelがテーブルを参照して、対象のカラムの内容に一致しないか(ユニークな値か)判断してくれるようです。

今回の設定で確認します。
usersテーブルには10件登録があって、idの「1〜10」が埋まっている状態です。
10を入力するとエラーになりますが、11を入力すると、usersテーブルに登録されていないので通過することが確認できました。

Laravelでuniqueのバリデーションエラー

複数のバリデーションルールを設定するには

複数のバリデーションルールを設定する場合には「|」(バーティカルバー)を使うか、配列にバリデーションルールを並べます。
|」を使う場合は、下記のように記載します。

$request->validate([
    'id' => 'required|max:5|unique:users,id'
]);

上記のように設定すると
「必須項目・文字列の上限が5桁・usersテーブルのidに存在しないユニークな値」かをバリデーションします。

これを配列で渡す場合は、下記のようにします。

$request->validate([
    'id' => ['required', 'max:5', 'unique:users,id']
]);

書き方が変わるだけで、バリデーションの内容は変わりません。
どちらも使うと、見たときにわかりにくくなるため、どちらかに統一して設定すると良いです。

Laravelのバリデーションルールの一覧

今回紹介したバリデーションのルールを表にまとめてみました。

ルール 内容
required 必須チェック
max:n 文字数の上限、n個まで入力可
min:n 文字数の下限、n個以上の入力が必要
email メールアドレスが有効か
url URLが有効か
nullable 設定項目のnull許可
numeric 数値チェック
regex:pattern 正規表現チェック、patternの表現に合わない場合にエラー
confirmed 項目の同値確認
required_with 対象項目が入力された場合は、指定項目が必須
unique:テーブル名,カラム名 テーブルのカラムと比べて、重複していないか確認する

コメント

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