Laravel验证digits规则问题:如何设置价格仅允许8或13位数字?
问题修复方案
嘿,这个问题我之前也踩过坑!核心原因是你用错了Laravel的验证规则,咱们一步步来解决:
1. 为什么原规则不生效?
Laravel的digits规则是用来指定固定长度的数字,它只接受单个整数参数(比如digits:8表示必须是8位数字)。当你写digits:8,13时,框架并不会把它解析成“8位或13位”,反而会把最后一个参数当成目标长度,所以输入8位时会提示需要13位数字,完全不符合你的预期。
2. 分两种场景修复
场景A:允许8到13位之间的所有数字(包括9/10/11/12位)
用digits_between规则,它专门用于指定数字长度的范围:
'price' => 'required|numeric|digits_between:8,13'
场景B:仅允许严格的8位或者13位数字(不接受中间长度)
如果你的需求是只能是这两个长度,那需要用正则表达式规则regex来精确匹配:
'price' => 'required|numeric|regex:/^\d{8}$|^\d{13}$/'
这个正则的意思是:要么是正好8位数字,要么是正好13位数字。
验证提示优化(可选)
如果你想给用户更清晰的提示,可以自定义错误消息,比如在验证规则里补充:
'price' => [ 'required' => '价格不能为空', 'numeric' => '价格必须是数字', 'regex' => '价格必须是8位或13位数字', ]
内容的提问来源于stack exchange,提问作者Dronax
相关产品推荐
相关产品推荐

