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

时间:2018-03-10 18:00:32

标签: laravel validation

我想验证一个"价格" Laravel的领域。

价格应该只包含没有(。)或(,)的数字,也不能包含0。

例如

2500 //传递

02500 //失败

12.12 //失败

12,12 /失败

我现在的规则如下:

'price' => 'required|integer|not_in:0',

它似乎与上面的例子有关,但是我不理解它。为什么integer不允许 0123 之类的内容为零。我只是想确保我的规则像预期的那样工作,我不会错过任何东西

由于

4 个答案:

答案 0 :(得分:4)

您可以在将输入发送到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',

希望这有帮助

答案 1 :(得分:3)

这对我有用:

'price' => 'required|numeric|gt:0',

答案 2 :(得分:2)

如果您不确定规则"整数",您可以使用正则表达式验证,如下所示:

'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"开头的数字。

答案 3 :(得分:0)

使用regex规则不允许以0开头的整数

'price' => 'required|integer|not_in:0|regex:^[1-9][0-9]+',