2015-03-30 2 views
1

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

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

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

+0

Если он работает с чистым целым, возможно, вы можете наложить строку '02'? – jav974

ответ

1

EDIT: Хорошо я нашел проблему. Поскольку в феврале есть только 28 дней, вы не можете подтвердить дату в этой библиотеке без дня (сейчас 30-й день в месяце, поэтому вместо сравнения 02 вместо 02).

Soloution:

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

ИЛИ

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

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

Нет, это не решит проблему. Задача в этой строке date ('m') –

+0

Как насчет этого: v :: date ('m') -> notEmpty() -> digit() -> validate ('02 '); – 3y3skill3r

+0

v :: date ('m') -> notEmpty() -> digit() -> validate ('02 '); false –

0

Вы должны указать format в !m. As noted on PHP manual, если другие части формата даты опущены, используется текущее время. Использование ! сбрасывает время до эпохи UNIX.

Об этом сообщается на another answer here.

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

0

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

PHP manual говорит:

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

Таким образом, во избежание проблем a fix has been made и Validation теперь используют вместо этого date_parse_from_format().

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

Возможно, вы захотите обновить свою версию библиотеки.

Смежные вопросы