Проверьте формат даты в php

Я пытаюсь проверить дату с помощью PHP.

Я хотел бы, чтобы следующие форматы были допустимы:

d/m/yy
d/m/yyyy
dd/m/yy
dd/m/yyyy
d/mm/yy
d/mm/yyyy
dd/mm/yy
dd/mm/yyyy

Я попробовал много регулярных выражений и различных изменений checkdate () функция. В настоящее время у меня есть что-то вроде этого:

function _date_is_valid($str)
{
     if(strlen($str) == 0)
         return TRUE;
     if(substr_count($str,'/') == 2)
     {
         if (preg_match("/^((((31\/(0?[13578]|1[02]))|((29|30)\/(0?[1,3-9]|1[0-2])))\/(1[6-9]|[2-9]\d)?\d{2})|(29\/0?2\/(((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))|(0?[1-9]|1\d|2[0-8])\/((0?[1-9])|(1[0-2]))\/((1[6-9]|[2-9]\d)?\d{2}))/", $str))
         {
             $datearray = explode('/',$str);
             if($datearray[2] > 2030)
                 return FALSE;
             return checkdate($datearray[1], $datearray[0], $datearray[2]);
         } 
         else 
         {
             return FALSE;
         }
     }
     return FALSE;
}

Это однако, проверяет даты как 11/11/200 и 11/11/200#

Как я могу проверить дату для соответствия требуемому формату?

Править: Я мог проверить datearray[2], чтобы быть между 10 и 30 и 2010 и 2030. Но есть ли способ проверить его с помощью regex?

Edit1: возвратите TRUE на strlen ($str) == 0, то, потому что я хочу, чтобы пользователи были в состоянии добавить события, не зная, когда будет событие происходить так, кто-то еще может квалифицировать расписание и присвоить событие определенной дате позже


Только для справки. Я закончил тем, что делал:

function _date_is_valid($str)
{
    if(strlen($str) == 0) //To accept entries without a date
        return TRUE;
    if(substr_count($str,'/') == 2)
    {
        list($d,$m,$y) = explode('/',$str);
        if(($y >= 10 && $y <= 30) || ($y >= 2010 && $y <= 2030))
        {
            return checkdate($m,$d,$y);
        }
    }
    return FALSE;
}

Спасибо за все Ваши ответы

15
задан LukeP 18 January 2010 в 15:10
поделиться

4 ответа

function _date_is_valid($str) {
    if (substr_count($str, '/') == 2) {
        list($d, $m, $y) = explode('/', $str);
        return checkdate($m, $d, sprintf('%04u', $y));
    }

    return false;
}
24
ответ дан 1 December 2019 в 00:59
поделиться

, если он всегда будет дата / месяц / год, вы можете использовать CheckDate :

function _date_is_valid($str)
{
    $array = explode('/', $str);

    $day = $array[0];
    $month = $array[1];
    $year = $array[2];

    $isDateValid = checkdate($month, $day, $year);
    return $isDateValid;
}
8
ответ дан 1 December 2019 в 00:59
поделиться

Попробуйте:

function _date_is_valid($str) {
    if (strlen($str) == 0) {
        return TRUE;
    }
    return preg_match('/^(\d{1,2})\/(\d{1,2})\/((?:\d{2}){1,2})$/', $str, $match) && checkdate($match[2], $match[1], $match[3]) && $match[2] <= 2030;
}
2
ответ дан 1 December 2019 в 00:59
поделиться

Как насчет , если (STRTOTIME ($ STR)! == false) $ valid = true;

0
ответ дан 1 December 2019 в 00:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: