Как исправить ошибку при проверке 'min' Laravel 5.8 - PullRequest
1 голос
/ 08 ноября 2019

Я пытаюсь проверить целочисленное поле, используя расширение класса 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 и отправляю данные для проверки запросов на проверку через Почтальон.

Ответы [ 2 ]

1 голос
/ 08 ноября 2019

Целочисленная валидация Laravel просто использует PHP-функцию filter_var. ( Источник Laravel ).

Что по какой-то причине будет анализировать "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)> min (1).

0 голосов
/ 08 ноября 2019

Вы можете обрезать все входные данные перед проверкой:

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

, поэтому trim удалит из строки все пробельные символы, включая символ новой строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...