Digits — 指定した桁数の数値かを検証する
validation
- カテゴリ: validation
- 掲載バージョン: Laravel 12・PHP 8.4
- ルール名:
digits
- 関連: numeric, digits_between, size
- 変更履歴: 特になし
要点(TL;DR)
- 数値が指定した桁数ちょうどかを検証するためのルール
digits:4 のように桁数を指定して使う
- 数値として扱われるが、先頭ゼロは桁数に含まれない点に注意
概要
digits は、入力値が数値であり、かつ指定した桁数と一致するかを検証するバリデーションルールです。
郵便番号の一部、認証コード、固定桁の番号入力などで使われます。
文字列長ではなく数値の桁数で判定される点が特徴です。
構文 / シグネチャ
'digits:桁数'
| 引数 | 型 | 必須 | 既定値 | 説明 |
|---|
| 桁数 | int | yes | なし | 数値の桁数 |
- 戻り値: なし(バリデーション判定のみ)
- 例外/副作用: なし
使用例
最小例
$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 桁になる
- 文字列として桁数を厳密に扱いたい場合は
size や regex を検討する
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 を使用 |
| 小数が弾かれる | 整数のみが対象 | 小数を許可する場合は別ルールを検討 |
参考リンク