я хочу создать дату проверки, но не знаю, почему возвращение ложно? - PullRequest
0 голосов
/ 18 июля 2011

Я хочу создать дату проверки, но не знаю, почему возвращение ложно?

$data_go = '2011/04/28';
$ddmmyyy='(0[1-9]|[12][0-9]|3[01])[- \/.](0[1-9]|1[012])[- \/.](19|20)[0-9]{2}';
            if(preg_match("/$ddmmyyy$/", $data_go)) {
               return TRUE;
            }else {
              return FALSE;
            }

Ответы [ 4 ]

3 голосов
/ 18 июля 2011

Поскольку ваша дата - гггг / мм / дд, а ваше регулярное выражение - дд / мм / гггг.

1 голос
/ 18 июля 2011

Я не очень хорошо знаком с regex (позор мне), но вы всегда можете использовать метод checkdate () для проверки стороны сервера дат.

В вашем случае вы делаете:

if (strpos($data_go, "/") !== false) {
    $date_exploded = explode("/", $data_go);
    if (checkdate($date_exploded[1], $date_exploded[2], $date_exploded[0])) {
        return TRUE;
    } else {
        return FALSE;
    }
} else {
    return FALSE;
}
0 голосов
/ 18 июля 2011

Вы пытаетесь сопоставить все возможные даты?Как отметил @nomulous, шаблон соответствует мм / дд / гггг, а не гг / мм / дд.Я бы пошел с checkdate, чтобы проверить дату, и использовал \ d вместо [0-9] для простоты.

0 голосов
/ 18 июля 2011

Следующее регулярное выражение соответствует вашей дате и другим подобным.

([1-9][\d]{3})[- \/.]([0-1][\d])[- \/.]([0-3][\d])

Пояснение

Первая группа ([1-9][\d]{3}) - это год и допускает диапазон от 1000 до 9999

Вторая группа ([0-1][\d]) является месяцем и допускает диапазон от 00 до 19 (очевидно, он не будет ловить плохие месяцы)

Третья группа ([0-3][\d]) - это день и допускается диапазонОт 00 до 39 (опять же, плохие дни не уловятся)

Если у вас есть эти части, вы можете выполнить явную проверку с использованием более подходящих инструментов, чем регулярное выражение, или просто использовать DateTimeначните с объекта и не изобретайте велосипед.

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