Проверка цены Laravel принимает только положительное число, а не только 0

Я хочу проверить поле «цена» в Laravel.

Цена должна содержать только числа без (.) Или (,) и также не может начинаться с 0.

Например

2500 // Пройдено

02500 // Не удается

12.12 // Неудачи

12,12 / Неудачно

Правило, которое у меня есть сейчас, выглядит так:

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

Кажется, это работает с приведенным выше примером, но я этого не понимаю. Почему integer не позволяет что-то вроде 0123 с начальным нулем. Я просто хочу убедиться, что мое правило работает должным образом, и что я ничего не пропускаю.

Спасибо

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
12
0
21 206
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Используйте правило регулярное выражение, чтобы не разрешать целое число с началом 0

'price' => 'required|integer|not_in:0|regex:^[1-9][0-9]+',

Да, я могу легко использовать регулярное выражение, но я хочу понять, почему правило laravels целое число не допускает ведущего нуля

user2722667 10.03.2018 19:11
Ответ принят как подходящий

если вы не уверены в правиле «целое число», вы можете использовать проверку выражения регулярного выражения следующим образом:

'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:

Validates value as integer, optionally from the specified range, and converts to int on success.

PHP не устанавливает никакой другой информации о значении «0», но известно, что эта функция не учитывает числа, начинающиеся с «0».

Да, я могу легко использовать регулярное выражение и добавить его тоже, моя проверка внешнего интерфейса, но я хочу понять, почему правило laravels целое число не допускает ведущего нуля

user2722667 10.03.2018 19:11

Я использовал то же самое, но выдает ошибку preg_match (): конечный разделитель '^' не найден

Jagruti Metaliya 23.04.2020 08:12

@JagrutiMetaliya писать в отдельном массиве вместо трубы

bhucho 18.01.2021 07:25

Вы можете отформатировать ввод перед отправкой его валидатору в вашем классе 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',

Надеюсь это поможет

Разве laravel не делает это из коробки с v5.4? Я думал о промежуточном программном обеспечении \ Illuminate \ Foundation \ Http \ Middleware \ TrimStrings :: class,laravel-news.com/laravel-5-4-middleware

user2722667 10.03.2018 20:50

@ user2722667 это просто пример, вы можете пропустить это

Adnan Mumtaz 10.03.2018 20:50

Это работает для меня:

'price' => 'required|numeric|gt:0',

Самое чистое решение

M.Imran Mamda 21.10.2020 22:08

Это чисто, но что, если вы хотите согласиться с нулевой ценой

Ahmad Daudu Sulaiman 09.04.2021 22:57

Затем добавьте gte: 0.

Nikolay Traykov 10.04.2021 09:23

Другие вопросы по теме