- カテゴリ: 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、注文番号、数量コードなど「数値としての桁数」を制限したいケースで使用する。max や size と違い、数値の大きさではなく桁数を見る点が重要。
構文 / シグネチャ
'field' => 'max_digits:5'
引数
| 引数 | 型 | 必須 | 既定値 | 説明 |
|---|---|---|---|---|
| max | int | はい | なし | 許可する最大桁数 |
- 戻り値: なし(バリデーション結果に影響)
- 例外/副作用: なし
使用例
最小例
$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 と併用が前提
単体指定では数値チェックにならないため、numericやintegerを併用する - 負数の符号は桁数に含まれない
-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 を指定していない | numeric か integer を追加 |
参考リンク
- Laravel公式ドキュメント Validation
https://laravel.com/docs/validation#rule-max-digits

