Laravel:验证大于零的数字是失败的

问题描述 投票:1回答:2

我要验证价格字段需要大于零(0.01有效),所以我有以下验证:

$request->validate([
            'product_price' => 'required|numeric|gt:0',
        ]);

问题是,当我在'product_price'字段中输入一个字符串时,我收到一个错误:

InvalidArgumentException比较下的值必须是相同的类型

这是为什么?我的意思是,在检查它是否> 0之前,我正在检查它应该是数字

php laravel validation laravel-validation
2个回答
12
投票

在Laravel 5.6及更高版本中添加了gtgteltlte,我猜这肯定是你得到错误的原因。 (虽然这对我有用。)

我想你可以这样试试

$request->validate([
    'product_price' => 'required|numeric|min:0|not_in:0',
]);

min:0确保最小值为0且不允许负值。 not_in:0确保值不能为0.因此,这两个规则的组合可以完成工作。

您可以为特定规则定义有意义的错误消息。 (您也可以使用正则表达式获得相同的结果。)


1
投票

你可以这样试试,

在调用Validator :: make()函数之前,通过附加要比较的值来修改规则集,如下所示:

use Illuminate\Support\Facades\Validator;

Validator::extend('greater_than', function ($attribute, $value, $otherValue) {
      return intval($value) > intval($otherValue[0]);
});

$validation = Validator::make($input, ['amount' => 'required|numeric|greater_than:0']);
© www.soinside.com 2019 - 2024. All rights reserved.