для проверки ГГГГ-ММ-ДД или ГГГГ-ДД-ММ:
$ptn = '/(\d{4})-(?:(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-2])|(0[1-9]|' .
'[1-2][0-9]|3[0-2])-(0[1-9]|1[0-2]))/';
echo preg_match_all($ptn, '2009-24-09 2009-09-24 dd', $m); // returns 2
даже в этом случае, дата может быть недействительной, например: 2010-02-29
, чтобы иметь дело с checkdate()
:
checkdate(2, 29, 2010); // returns false