こんな悩みを解決します。
いのうえ
こんにちは、学生フリーランスエンジニアのいのうえ(@inouelog)です!
この記事では
Laravelで数値を最小値・最大値でバリデーションする方法
について解説します。
前置き
Laravelで数値を最小値・最大値でバリデーションするには、次の2つの手順を踏みます。
まずはフロントエンド側で数値を制御します。しかし、デベロッパーツールでhtmlのソースを改変できるので不十分です。
そこで、バックエンド側でLaravelのバリデーション機能を使って制御します。
この記事では、例として
数値の最小値を0、最大値を100
にバリデーションしてみます。
【Laravel】数値を最小値・最大値でバリデーション① フロントエンド
Laravel CollectiveのFormファサードを使って、baldeファイルを次のように書きます。
{!! Form::number('num', old('num'), ['class' => 'form-control', 'min' => '0', 'max' => '100']) !!}
属性 | 制御する数値 |
---|---|
min | 最小値 |
max | 最大値 |
Laravel Collectiveを使わない場合は
<input class="form-control" min="0" max="100" name="num" type="number" value="{{ old('num') }}">
-1や101を入力してsubmitすると、次のようにバリデーションされます。
【Laravel】数値を最小値・最大値でバリデーション② バックエンド
次にコントローラを編集して、バックエンドでバリデーションします。
$request->validate([
'num' => 'numeric|min:0|max:100'
]);
先ほどと同じで
機能 | 制御する数値 |
---|---|
min | 最小値 |
max | 最大値 |
numericは
数字または数値形式の文字列であるか
バリデーションします。
また、betweenを使って、次のように書くこともできます。
$request->validate([
'num' => 'numeric|between:0,100'
]);
いのうえ
betweenを使ったほうがスッキリしていますね。
コードの解説をすると
between:最小値,最大値
です。
最小値・最大値ともにバリデーションする場合は、betweenを使ったほうが可読性は良いでしょう。
以上、『【Laravel】数値を最小値・最大値でバリデーションする方法』でした。