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:テーブル名,カラム名 | テーブルのカラムと比べて、重複していないか確認する |
コメント