Laravelのバリデーションで使える標準のルールで、よく使っているルールの11個について解説しています。
ここに上げているバリデーション以外の詳細は、公式のこちらに書いているので確認してみてください。
Laravelのバリデーションルールのまとめ
Laravelのバリデーションルールについて解説していきます。
必須チェック(required)
フォームの項目を必須にするにはrequiredを使用します。
$request->validate([
'id' => 'required',
'password' => 'required',
]);
このように設定すると、id・passwordの項目が必須になります。
エラーの場合は、下記のようにメッセージが表示されます。(※bladeにエラーを表示するタグが必要になります)

文字数の上限チェック(max)
フォームの項目に文字数の上限を設定するにはmaxを使用します。
$request->validate([
'id' => 'max:5',
'password' => 'max:8',
]);
このように設定すると、idは5文字までpasswordは8文字までの設定になります。
フロント側でmaxlengthを設定しておくと、このバリデーションにかかることはないです。
ですが、フロントのコードが変えられた場合などを想定して、付けておく方がいいです。
エラーの場合は、下記のようにメッセージが表示されます。

文字数の下限チェック(min)
フォームの項目に文字数の下限を設定するにはminを使用します。
$request->validate([
'id' => 'min:3',
'password' => 'min:5',
]);
このように設定すると、idは3文字以上の入力が必須で、passwordは5文字以上の文字数が入力必須の設定になります。
エラーの場合は、下記のようにメッセージが表示されます。

メールアドレスチェック(email)
emailを使うと、フォームの項目の内容がメールアドレスとして正しいかをバリデーションできます。
public function emailTest(Request $request)
{
$request->validate([
'mail_address' => 'email',
]);
}
このように設定すると、送られてきたリクエストのmail_addressパラメータの内容がメールアドレスとして正しいかをバリデーションします。
エラーの場合は、下記のようにメッセージが表示されます。メールアドレスではない文字列を入力しました!

URL有効チェック(url)
urlを使うと、入力内容がURLとして正しいかをバリデーションできます。
public function urlTest(Request $request)
{
$request->validate([
'page_url' => 'url',
]);
}
このように設定すると、送られてきたリクエストのpage_urlパラメータのURLが正しいかをバリデーションします。
エラーの場合は、下記のようにメッセージが表示されます。
最初にURLではない文字列を入力して、その後にURLを入力してバリデーションを通過できるか試してみました。

NULL許可する(nullable)
フォームの項目に入力がなくても問題ない場合はnullableを使います。
項目が入力されている場合のみバリデーションしたい場合に使用します。入力されていない場合は無視されるようになります。
public function nullableTest(Request $request)
{
$request->validate([
'id' => 'nullable|max:5',
]);
}
上記のように設定すると、入力されていない場合は無視してバリデーションしません。
入力されている場合のみ、他に設定されているバリデーションルールを使って、バリデーションします。
今回は入力されている場合は文字列数が5文字上限までのバリデーションを入れています。
最初に何も入れずに進むと、エラーにならずに通過します。次に6文字入れて進むとエラーになることが確認できました。

数値チェック(numeric)
numericを設定すると、数値かどうかをバリデーションすることができます。
public function numericTest(Request $request)
{
$request->validate([
'id' => 'numeric'
]);
}
上記のように設定すると、idのリクエストパラメータとして送られてきた値が数値でない場合にエラーにします。
下記のように最初に未入力で進んで、次に文字列を入れて進んでみました。これはどちらもエラーになります。
対象項目に数値のみ入力して進むと、エラーにならずに進むことができました。

正規表現チェック(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」と正規表現にマッチする内容を入力すると、バリデーションを通過できました。


確認入力チェック(confirmed)
confirmedを設定された項目がxxx_confirmation項目と同じかを確認します。
例えば、passwordにconfirmedが設定されると、password_confirmation項目に同じものが入力されているかをバリデーションします。
public function confirmedTest(Request $request)
{
$request->validate([
'password' => 'confirmed:password'
]);
}
上記のように設定した場合は、フォームのpasswordとpassword_confirmationの項目の内容が一致しない場合にエラーになります。
実際に間違えるとエラーになって、同じ内容を入力したらバリデーションが通過することが確認できました。

対象項目が入力されたときに、他の項目の必須チェック(required_with)
required_withを使うと、対象の項目が入力されたときに、指定項目の入力必須のバリデーションをすることができます。
public function requiredWithTest(Request $request)
{
$request->validate([
'password' => 'required_with:id'
]);
}
上記のように設定すると、id項目が入力された場合に、password項目が入力されていないとエラーになります。
required_withと書いた後に「:」の右側が入力対象の項目です。
今回の内容で確認すると、何も入力せずに進むと、バリデーションを通過します。
id項目に値を入力して進もうとすると、passwordが入っていないのでエラーになりました。

入力された内容が一意チェック(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テーブルに登録されていないので通過することが確認できました。

複数のバリデーションルールを設定するには
複数のバリデーションルールを設定する場合には「|」(バーティカルバー)を使うか、配列にバリデーションルールを並べます。
「|」を使う場合は、下記のように記載します。
$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個以上の入力が必要 |
| メールアドレスが有効か | |
| url | URLが有効か |
| nullable | 設定項目のnull許可 |
| numeric | 数値チェック |
| regex:pattern | 正規表現チェック、patternの表現に合わない場合にエラー |
| confirmed | 項目の同値確認 |
| required_with | 対象項目が入力された場合は、指定項目が必須 |
| unique:テーブル名,カラム名 | テーブルのカラムと比べて、重複していないか確認する |

コメント