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

validation
  • カテゴリ: validation
  • 掲載バージョン: Laravel 12・PHP 8.4
  • ルール名: digits
  • 関連: numeric, digits_between, size
  • 変更履歴: 特になし

要点(TL;DR)

  • 数値が指定した桁数ちょうどかを検証するためのルール
  • digits:4 のように桁数を指定して使う
  • 数値として扱われるが、先頭ゼロは桁数に含まれない点に注意

概要

digits は、入力値が数値であり、かつ指定した桁数と一致するかを検証するバリデーションルールです。
郵便番号の一部、認証コード、固定桁の番号入力などで使われます。
文字列長ではなく数値の桁数で判定される点が特徴です。

構文 / シグネチャ

'digits:桁数'
  • 引数
引数必須既定値説明
桁数intyesなし数値の桁数
  • 戻り値: なし(バリデーション判定のみ)
  • 例外/副作用: なし

使用例

最小例

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

実務例

use Illuminate\Http\Request;

public function verify(Request $request)
{
    $validated = $request->validate([
        'auth_code' => ['required', 'digits:4'],
    ]);

    // 認証コードが 4 桁の数値であることが保証される
}

よくある落とし穴・注意

  • 先頭ゼロは桁数に含まれない
    例: “0123” は数値として 123 と扱われ、3 桁になる
  • 文字列として桁数を厳密に扱いたい場合は sizeregex を検討する
  • numeric を明示的に書かなくても、digits 自体が数値チェックを含む

代替・関連APIとの比較

  • digits_between
    最小桁数〜最大桁数の範囲で許可したい場合
  • size
    数値ではなく文字列長として桁数を判定したい場合
  • numeric
    桁数制限は不要で、数値であることだけを確認したい場合

テスト例(Pest)

it('accepts only 4 digit numbers', function () {
    $rules = ['code' => 'digits:4'];

    expect(validator(['code' => 1234], $rules)->passes())->toBeTrue();
    expect(validator(['code' => 123], $rules)->passes())->toBeFalse();
});

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

症状/エラー原因対処
先頭ゼロ付きの値が通らない数値として評価されている文字列扱いにして size を使用
小数が弾かれる整数のみが対象小数を許可する場合は別ルールを検討

参考リンク

レン (Wren)

こんにちは。レンです。

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

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

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

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

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

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