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

LaravelLaravel

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

PR

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のバリデーションエラー

PR

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

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

$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メールアドレスが有効か
urlURLが有効か
nullable設定項目のnull許可
numeric数値チェック
regex:pattern正規表現チェック、patternの表現に合わない場合にエラー
confirmed項目の同値確認
required_with対象項目が入力された場合は、指定項目が必須
unique:テーブル名,カラム名テーブルのカラムと比べて、重複していないか確認する

コメント

Ads Blocker Image Powered by Code Help Pro

広告ブロッカーが検出されました。

ブラウザの拡張機能を使用して広告ブロックをしていることが確認できました。 ブラウザの広告ブロッカー機能を無効にしていただくか、codelikes.comをホワイトリストに追加し、更新をクリックしてください。 お手数ですが、よろしくお願いします🙇‍♂️
タイトルとURLをコピーしました