我想验证Laravel中的“价格”字段。
价格应该只包含没有(。)或(,)的数字,也不能包含0。
例如
2500 //通过
02500 //失败
12.12 //失败
12,12 /失败
我现在的规则如下:
'price' => 'required|integer|not_in:0',
它似乎适用于上面的例子,但我不理解它。为什么integer
不允许像0123那样的起始零点。我只是想确保我的规则像预期的那样工作,我不会错过任何东西
谢谢
如果您不确定规则“整数”,可以使用正则表达式验证,如下所示:
'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”开头的数字。
您可以在将输入发送到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',
希望这可以帮助
使用regex规则不允许以0开头的整数
'price' => 'required|integer|not_in:0|regex:^[1-9][0-9]+',