【问题标题】:Laravel price validation only accept positive number and not only 0Laravel 价格验证只接受正数而不是 0
【发布时间】:2018-08-19 02:49:19
【问题描述】:

我想验证 Laravel 中的“价格”字段。

价格只能包含不带 (.) 或 (,) 的数字,也不能以 0 开头。

例如

2500 //通过

02500 // 失败

12.12 // 失败

12,12 / 失败

我现在的规则是这样的:

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

上面的例子似乎可以工作,但我不明白。为什么integer 不允许像 0123 这样的开头为零。我只是想确保我的规则按预期工作并且我不会错过任何东西

谢谢

【问题讨论】:

    标签: laravel validation


    【解决方案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 不允许前导零
    猜你喜欢
    • 1970-01-01
    • 2018-12-11
    • 1970-01-01
    • 1970-01-01
    • 2021-06-25
    • 2019-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多