PR

【Laravel】数値を最小値・最大値でバリデーションする方法

アイキャッチ画像
この記事で解決できる悩み
  • laravelで数値を最小値・最大値でバリデーションするには?

こんな悩みを解決します。

いのうえ
いのうえ

こんにちは、学生フリーランスエンジニアのいのうえ(@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は

数字または数値形式の文字列であるか

バリデーションします。

numericを省略するとバリデーションに失敗するので、省略しないでください。

また、betweenを使って、次のように書くこともできます。

$request->validate([
            'num' => 'numeric|between:0,100'
        ]);
いのうえ
いのうえ

betweenを使ったほうがスッキリしていますね。

コードの解説をすると

between:最小値,最大値

です。

最小値・最大値ともにバリデーションする場合は、betweenを使ったほうが可読性は良いでしょう。

以上、『【Laravel】数値を最小値・最大値でバリデーションする方法』でした。