【问题标题】:Laravel validation : difference between numeric and integer?Laravel 验证:数字和整数之间的区别?
【发布时间】:2017-03-18 23:51:22
【问题描述】:

laravel docs 中似乎有一个integer 和一个numeric 验证规则。我想知道两者之间的区别是什么?

【问题讨论】:

    标签: laravel validation


    【解决方案1】:

    整数就像一个没有分数的整数:2, 256, 2048

    http://php.net/manual/en/function.is-int.php

    数字是任何数字,包括浮点数:2.478, +0123.45e6

    http://php.net/manual/en/function.is-numeric.php

    【讨论】:

    • 在 HTML 中,当使用 <input type="number"/> 并在 Laravel 上使用 integer 验证它时,我收到了 must be an integer 错误。
    • 请注意integer:即使字符串在被检查的数字之前和之后包含空格,验证也会通过。对于应用程序,它将产生错误“遇到格式不正确的数值”。使用numeric,应用程序将正确处理该错误并要求用户检查他们的输入。
    • 这是误导。 Laravel 不擅长严格输入。如果 $value 设置为 (bool)true,那么 is_int 返回 false,但是 Laravel 用于整数验证的 filter_var($value, FILTER_VALIDATE_INT) !== false 将返回 true。所以 (bool)true 和 (int)$x 根据 Laravel 的验证器返回 true。
    【解决方案2】:

    根据 Laravel 的源代码,这两个验证都有以下逻辑。

    // For rule 'integer'
    protected function validateInteger($attribute, $value)
    {
        return filter_var($value, FILTER_VALIDATE_INT) !== false;
    }
    
    // For rule 'numeric'
    protected function validateNumeric($attribute, $value)
    {
        return is_numeric($value);
    }
    

    更多参考请深入 Laravel 的源代码 - here >>

    【讨论】:

      猜你喜欢
      • 2013-03-27
      • 2021-08-23
      • 2017-06-25
      • 2023-03-29
      • 1970-01-01
      • 2018-01-15
      • 1970-01-01
      • 1970-01-01
      • 2012-06-12
      相关资源
      最近更新 更多