Laravel 验证:数字和整数之间的区别?

Posted

技术标签:

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

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

【问题讨论】:

【参考方案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 >>

【讨论】:

以上是关于Laravel 验证:数字和整数之间的区别?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 验证中有时和可为空的区别

Laravel - 使用正则表达式仅验证字母、数字和空格

Laravel 5.8:验证多个输入

仅在 Laravel 5.4 用户名上验证英文字母和数字 [重复]

有符号/无符号字符之间的区别[重复]

Laravel 7.x:新鲜和刷新方法之间的区别?