【问题标题】:How to fix bug on validation 'min' Laravel 5.8如何修复验证'min' Laravel 5.8 上的错误
【发布时间】:2020-03-05 09:53:00
【问题描述】:

我正在尝试使用 FormRequest 类扩展来验证整数字段。 在大多数情况下验证工作正常,但我发现了一个问题。

规则是

'operation_id'      => 'required|integer|min:1'

它适用于以下值:

operation_id: 0  //false
operation_id: 0s //false
operation_id: -1 //false
operation_id: 1  //true

但是设置值失败

operation_id: 0\n //It throws a true when it should be a false

我正在使用 Laravel 5.8,我正在通过 Postman 发送数据以测试请求验证。

【问题讨论】:

  • 0\n 不是整数,所以即使它通过min 它仍然应该在integer 失败
  • 是的,但不是:(
  • 是文字 '0\n' 还是你想说的是 "0\n" ... 0 换行?
  • 0 换行

标签: php laravel validation laravel-5


【解决方案1】:

您可以在验证之前修剪所有输入:

$request->merge(array_map("trim", $request->all()));

所以trim 将从字符串中删除所有空格字符,包括换行符。

【讨论】:

  • 有一个TrimStrings 中间件应该已经作为一个全局中间件存在
  • 如果有的话,我猜输入的末尾不会有换行符,对吧?
【解决方案2】:

Laravel 的整数验证只是使用 PHP 的 filter_var 函数。 (Laravel Source)。

由于某种原因,这会将 "0\n"(零 + 新行)解析为有效整数 0

// Example:

$var = "0\n"; // This get's parsed as zero + new line
$result = filter_var($var, FILTER_VALIDATE_INT); // true

$var = '0\n'; // This is string literal "0\n"
$result = filter_var($var, FILTER_VALIDATE_INT); // FALSE

因此,似乎integer 验证通过了上述原因,而min 验证通过了,因为字符串长度 (3) 大于最小值 (1)。

【讨论】:

    猜你喜欢
    • 2019-12-26
    • 2019-10-23
    • 2012-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-17
    • 1970-01-01
    • 2020-01-05
    相关资源
    最近更新 更多