use*_*667 5 validation laravel
我想验证Laravel中的“价格”字段。
价格应仅包含不带(。)或(,)的数字,并且也不能以0开头。
例如
2500 //通过
02500 //失败
12.12 //失败
12,12 /失败
我现在的规则如下所示:
'price' => 'required|integer|not_in:0',
Run Code Online (Sandbox Code Playgroud)
它似乎与上面的示例一起工作,但是我不理解。为什么integer不允许像0123这样的内容以零开头。我只想确保自己的规则符合预期,并且我不会错过任何东西
谢谢
Nik*_*kov 17
这对我有用:
'price' => 'required|numeric|gt:0',
Run Code Online (Sandbox Code Playgroud)
如果您不确定规则“整数”,您可以使用正则表达式验证如下:
'price' => 'required|regex:^[1-9][0-9]+|not_in:0',
Run Code Online (Sandbox Code Playgroud)
我遇到了和你一样的问题,从那以后我总是使用正则表达式验证来满足这种要求。此外,如果您想使用 js 进行前端验证,它允许您收回相同的正则表达式。
这是允许验证整数的 laravel 函数:
public function validateInteger($attribute, $value)
{
return filter_var($value, FILTER_VALIDATE_INT) !== false;
}
Run Code Online (Sandbox Code Playgroud)
因此,这种行为是由 PHP 本身引起的。PHP 告诉我们关于 FILTER_VALIDATE_INT 的事情:
将 value 验证为 integer,可选地来自指定的范围,并在成功时转换为 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();
}
Run Code Online (Sandbox Code Playgroud)
那你可以用
'price' => 'required|integer|min:0',
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助