max_digits — 数値の最大桁数を制限するバリデーション

validation
  • カテゴリ: validation
  • 掲載バージョン: Laravel 12・PHP 8.4
  • 名前空間 / FQCN / コマンド: Illuminate\Validation\Concerns\ValidatesAttributes
  • 関連: digits, min_digits, digits_between, numeric
  • 変更履歴: Laravel 9 で追加(数値の桁数専用ルール)

要点(TL;DR)

  • 数値の桁数が 指定した最大値 以下かを検証する
  • max_digits:5 のように指定する
  • 文字列長ではなく 数値の桁数 が対象。小数点や符号に注意

概要

max_digits は、入力値が数値であり、その桁数が指定した最大値以下であることを検証するバリデーションルール。
ID、注文番号、数量コードなど「数値としての桁数」を制限したいケースで使用する。
maxsize と違い、数値の大きさではなく桁数を見る点が重要。

構文 / シグネチャ

'field' => 'max_digits:5'

引数

引数必須既定値説明
maxintはいなし許可する最大桁数
  • 戻り値: なし(バリデーション結果に影響)
  • 例外/副作用: なし

使用例

最小例

$request->validate([
    'code' => ['required', 'numeric', 'max_digits:5'],
]);
  • OK: 12345
  • NG: 123456

実務例

use Illuminate\Http\Request;

public function store(Request $request)
{
    $validated = $request->validate([
        'order_no' => ['required', 'integer', 'max_digits:10'],
    ]);

    // 注文番号は最大10桁の数値として保存
}
  • 注文番号や管理番号など、数値だが桁数制約が必要な場合に有効

よくある落とし穴・注意

  • 文字列の長さは検証しない
    max_digits は数値ルール。"00123" は数値化されると 123 になり、桁数は 3 と判定される
  • 小数点は桁数に含まれない
    12.34 は整数部と小数部を含めた扱いになるため、意図しない結果になることがある
  • numeric や integer と併用が前提
    単体指定では数値チェックにならないため、numericinteger を併用する
  • 負数の符号は桁数に含まれない
    -123 は 3 桁として扱われる

代替・関連APIとの比較

  • digits
    指定した桁数と完全一致させたい場合に使用
  • min_digits
    最小桁数のみを制限したい場合
  • digits_between
    最小・最大を同時に指定したい場合
  • max
    数値の大きさ(値)を制限する。桁数ではない

選定基準として、数値の大きさではなく 見た目上の桁数 を制御したい場合は max_digits を選ぶ。

テスト例(Pest)

it('rejects numbers exceeding max digits', function () {
    $rules = ['value' => ['numeric', 'max_digits:3']];

    $this->assertFalse(validator(['value' => 1234], $rules)->passes());
    $this->assertTrue(validator(['value' => 123], $rules)->passes());
});

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

症状/エラー原因対処
期待より桁数が少なく判定される先頭ゼロが数値変換で落ちている文字列として扱い max を使用
小数で失敗する小数点を含む数値を渡しているinteger を併用する
文字列が通ってしまうnumeric を指定していないnumericinteger を追加

参考リンク

レン (Wren)

こんにちは。レンです。

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

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

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

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

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

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