我想验证拉拉维尔中的"价格"字段。
价格应仅包含不带 (.( 或 (,( 的数字,也不能以 0 开头。
例如
2500//通行证
02500//失败
12.12//失败
12,12/失败
我现在的规则如下所示:
'price' => 'required|integer|not_in:0',
它似乎适用于上面的例子,但我不明白。为什么integer
不允许像 0123 这样以零开头的东西。我只是想确保我的规则按预期工作,并且不会错过某些内容
谢谢
我有用:
'price' => 'required|numeric|gt:0',
您可以在将输入发送到 Request
类中的验证器之前格式化输入。
public function formatInput()
{
$input = array_map('trim', $this->all());
$input['price'] = (int)($input['price']);
$this->replace($input);
return $this->all();
}
然后你可以使用
'price' => 'required|integer|min:0',
希望这有帮助
如果您不确定规则"整数",则可以按如下方式使用正则表达式验证:
'price' => 'required|regex:^[1-9][0-9]+|not_in:0',
我遇到了一些与您相同的问题,从那时起,我总是使用正则表达式验证来满足此类要求。此外,如果您想使用 js 进行前端验证,它允许您收回相同的正则表达式。
这是允许验证整数的 laravel 函数:
public function validateInteger($attribute, $value)
{
return filter_var($value, FILTER_VALIDATE_INT) !== false;
}
所以PHP本身关注这种行为。PHP 告诉我们关于 FILTER_VALIDATE_INT 的这件事:
验证值为整数,可以选择指定范围的值,并且 成功后转换为 int。
PHP 没有设置关于"0"值的其他信息,但众所周知,此函数不考虑以"0"开头的数字。
使用正则表达式规则不允许以 0 开头的整数
'price' => 'required|integer|not_in:0|regex:^[1-9][0-9]+',