Laravel价格验证仅接受正数,而不仅仅是0



我想验证拉拉维尔中的"价格"字段。

价格应仅包含不带 (.( 或 (,( 的数字,也不能以 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]+',

相关内容

最新更新