digits_between — 指定した桁数の数値かを検証する

validation

カテゴリ: validation
掲載バージョン: Laravel 12・PHP 8.4
名前空間 / FQCN / コマンド: Illuminate\Validation\Rules\DigitsBetween
関連: digits, digits_between, between, numeric
変更履歴: なし

要点(TL;DR)

  • 数値の 桁数 が指定した範囲内かを検証する
  • digits_between:min,max を指定する
  • 数値としての大小ではなく、文字列長ではなく、桁数で判定される点に注意

概要

Digits Between は、入力値が 数値 であり、その 桁数 が指定した最小値から最大値の範囲に収まっているかを検証するバリデーションルール。電話番号や確認コード、ID など、桁数が重要な値の検証に向いている。

between とは異なり、数値の大小は見ない。あくまで「何桁か」をチェックする。

構文 / シグネチャ

'digits_between:min,max'
引数必須既定値説明
minintyesなし最小桁数
maxintyesなし最大桁数

戻り値: なし(バリデーションルール)
例外/副作用: なし

使用例

最小例

$request->validate([
    'code' => ['required', 'digits_between:4,6'],
]);

4 桁以上 6 桁以下の数値のみを許可する。

実務例

use Illuminate\Http\Request;

public function store(Request $request)
{
    $validated = $request->validate([
        'verification_code' => [
            'required',
            'digits_between:6,8',
        ],
    ]);

    // 認証コードの照合処理など
}

SMS やメールで送る確認コードの検証にそのまま使える。

よくある落とし穴・注意

  • numeric や integer を併用する必要はない
    digits_between 自体が数値であることを前提に検証する
  • leading zero も桁数としてカウントされる
    例: “0012” は 4 桁として扱われる
  • between と混同しやすい
    between は値の範囲、digits_between は桁数の範囲

代替・関連APIとの比較

  • digits
    固定桁数を求める場合はこちら。例: digits:6
  • between
    数値や文字列の長さの範囲を検証したい場合
  • size
    桁数を 1 つに固定したい場合の代替だが、digits の方が意図が明確

選定基準:
桁数が可変なら digits_between、固定なら digits。

テスト例(Pest)

it('accepts numbers with digits between 4 and 6', function () {
    $validator = validator(
        ['code' => '12345'],
        ['code' => 'digits_between:4,6']
    );

    expect($validator->passes())->toBeTrue();
});

トラブルシュート(エラー別)

症状/エラー原因対処
常にバリデーションエラーになる数値以外が送られている入力値を確認する
桁数が合っているのに失敗全角数字が含まれている半角数字に正規化する

参考リンク

レン (Wren)

こんにちは。レンです。

Laravelのコードの森に住んでいる、小さな案内役です。
ルーティングの枝やクラスの影を歩きながら、コードの流れや仕組みを眺めています。

このサイトでは、Laravelの基本から実装のコツまで、開発で役立つポイントを静かに整理しています。
難しいことを増やすのではなく、コードの見通しが少し良くなるヒントを届けるのが役目です。

「この処理はどこに書くのがいいのか」
「Laravelではどう考えると整理できるのか」

そんな疑問に、小さなメモを残すような気持ちで記事を書いています。

コードを書いている途中で迷ったとき、
このサイトが少し立ち止まって整理できる場所になればうれしいです。

レン (Wren)をフォローする