Laravel 价格验证只接受正数而不是 0
Posted
技术标签:
【中文标题】Laravel 价格验证只接受正数而不是 0【英文标题】:Laravel price validation only accept positive number and not only 0 【发布时间】:2018-08-19 02:49:19 【问题描述】:我想验证 Laravel 中的“价格”字段。
价格只能包含不带 (.) 或 (,) 的数字,也不能以 0 开头。
例如
2500 //通过
02500 // 失败
12.12 // 失败
12,12 / 失败
我现在的规则是这样的:
'price' => 'required|integer|not_in:0',
上面的例子似乎可以工作,但我不明白。为什么integer
不允许像 0123 这样的开头为零。我只是想确保我的规则按预期工作并且我不会错过任何东西
谢谢
【问题讨论】:
【参考方案1】:这对我有用:
'price' => 'required|numeric|gt:0',
【讨论】:
最干净的解决方案 这很干净,但如果你想接受 0 价格值怎么办 然后添加 gte:0。【参考方案2】:您可以在将输入发送到 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',
希望对你有帮助
【讨论】:
自 v5.4 以来,laravel 是否开箱即用?我在想 \Illuminate\Foundation\Http\Middleware\TrimStrings::class, 中间件laravel-news.com/laravel-5-4-middleware @user2722667 这只是一个例子,你可以跳过这个【参考方案3】:如果您不确定“整数”规则,可以使用正则表达式验证,如下所示:
'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”开头的数字。
【讨论】:
是的,我可以轻松使用正则表达式并将其添加到我的前端验证中,但我想了解为什么 laravel 规则 integer 不允许前导零 我使用相同但给我错误 preg_match(): No end delimiter '^' found @JagrutiMetaliya 写入单独的数组而不是管道【参考方案4】:使用regex 规则不允许以 0 开头的整数
'price' => 'required|integer|not_in:0|regex:^[1-9][0-9]+',
【讨论】:
是的,我可以轻松使用正则表达式,但我想了解为什么 laravel 规则 integer 不允许前导零以上是关于Laravel 价格验证只接受正数而不是 0的主要内容,如果未能解决你的问题,请参考以下文章