Проверка месяца с помощью «Respect Validation»

Я пытаюсь написать правило проверки для месяца кредитной карты, и я использую Уважение Валидация библиотека для этого.

v::string()->date('m')->validate('02');

Результат FALSE но это должно быть TRUE потому что «02» является действительным месяцем

1

Решение

РЕДАКТИРОВАТЬ: Хорошо, я нашел проблему. Поскольку в феврале только 28 дней, вы не можете проверить дату с этой библиотекой без дня (сейчас это 30-й день в месяце, поэтому для сравнения он возвращает 03 вместо 02).

Soloution:

v::int()->between(1, 12)->validate(02);

ИЛИ ЖЕ

Вы можете добавить первый день к сравнению.

$value = '01-'.$input;
v::string()->date('d-m')->validate($value);
1

Другие решения

Вам необходимо указать format как !m, Как отмечено в руководстве по PHP, если другие части формата даты не указаны, используется текущее время. С помощью ! сбрасывает время в эпоху UNIX.

Это было объяснено на другой ответ здесь.

PS: мы попробуем исправить это в самой библиотеке.

0

Проблема заключалась в том, что валидация выполняла эту проверку с использованием DateTime::createFromFormat(),

Руководство по PHP говорит:

Если format не содержит персонажа ! тогда порции сгенерированного времени, которые не указаны в формате, будут установлены на текущее системное время.

Итак, чтобы избежать проблем, исправление было сделано и проверка в настоящее время использует date_parse_from_format() вместо.

Эта ошибка была исправлена ​​31 марта 2016 года (версии 0.8.14, 0.9.8 и 1.0.5), и она также доступна в версии 1.1.

Вы можете рассмотреть возможность обновления вашей версии библиотеки.

0
По вопросам рекламы [email protected]