在 Laravel 5.7 中,digit_between:min,max
验证规则用于确保字段的值是一个数字,并且该数字位于指定的最小值和最大值之间。这个规则主要用于验证整数或浮点数,但它并不接受数字类型中允许的所有符号。
min
和最大值 max
之间。min
和 max
都是整数时,验证的是整数范围。min
或 max
包含小数点时,验证的是浮点数范围。如果你发现 digit_between:min,max
规则不接受某些数字符号(如千位分隔符),这通常是因为默认情况下,Laravel 的验证器会将输入视为普通的字符串,并尝试将其转换为数字进行比较。如果字符串中包含非数字字符(除了小数点),转换可能会失败。
如果你需要验证包含千位分隔符的数字,可以先使用 replace
函数去除这些分隔符,然后再应用 digit_between:min,max
规则。例如:
use Illuminate\Validation\Rule;
$validator = Validator::make($request->all(), [
'number' => [
Rule::required(),
function ($attribute, $value, $fail) {
// 移除千位分隔符
$cleanValue = str_replace(',', '', $value);
if (!is_numeric($cleanValue)) {
$fail('The :attribute must be a number.');
}
},
'digit_between:1000,9999' // 假设我们希望数字在1000到9999之间
],
]);
在这个例子中,我们首先移除了输入值中的所有逗号,然后检查清理后的值是否为数字,并且是否在指定的范围内。
以下是一个完整的控制器方法示例,展示了如何使用自定义验证规则来处理包含千位分隔符的数字:
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'number' => [
Rule::required(),
function ($attribute, $value, $fail) {
$cleanValue = str_replace(',', '', $value);
if (!is_numeric($cleanValue)) {
$fail('The :attribute must be a number.');
}
},
'digit_between:1000,9999'
],
]);
if ($validator->fails()) {
return redirect('your-route')
->withErrors($validator)
->withInput();
}
// 如果验证通过,继续处理请求...
}
通过这种方式,你可以确保即使输入值包含千位分隔符,也能正确地验证其是否为一个有效的数字,并且是否在指定的范围内。
领取专属 10元无门槛券
手把手带您无忧上云