if (preg_match('#^(\d{4}).(\d{2}).(\d{2})$#', $_POST['date'], $matches) && checkdate($matches[2], $matches[3], $matches[1]))
if (preg_match('#^(\d{4}).(\d{2}).(\d{2})$#', $_POST['date'], $matches) && checkdate($matches[2], $matches[3], $matches[1]))
Цитата (Invis1ble @ 6.09.2011 - 01:16) |
я все же попробую добить, совсем немного осталось |
$pattern =
'/^
# год
(?!0000)\pN{2}(?:(
(?:
# високосный
([02468])|[13579])(?(2)[048]|[260]))|
# невисокосный
\pN{2}
)
\.
# месяц
(?:(0)(?!0)|1)(?(3)[0-9]|[0-2])
\.
# число
(?!00)(?:(?<!02\.)(3)|[0-2])(?(4)(?(?<=(?:01|03|05|07|08|10|12).{2})1|0)|
# 1-3 триады
(?(?<=02.{2})
# февраль
(?(?<=2)
# 3-я триада
(?(1)
# високосный год
[0-9]|
# невисокосный год
[0-8]
)|
# 1-2 триады
[0-9]
)|
# не февраль
[0-9]
)
)
$/ux';
$dates = array(
'1352.01.01',
'2000.02.29',
'2004.02.29',
'2003.01.01',
'2001.02.29',
'1989.04.31',
'2010.13.05',
'2011.11.32',
'0001.01.01'
);
$pattern = '/^(?!0000)\pN{2}(?:((?:([02468])|[13579])(?(2)[048]|[260]))|\pN{2})\.(?:(0)(?!0)|1)(?(3)[0-9]|[0-2])\.(?!00)(?:(?<!02\.)(3)|[0-2])(?(4)(?(?<=(?:01|03|05|07|08|10|12).{2})1|0)|(?(?<=02.{2})(?(?<=2)(?(1)[0-9]|[0-8])|[0-9])|[0-9]))$/u';
foreach ($dates as $date) {
$items = explode('.', $date);
echo $date . ' ';
var_dump((bool)preg_match($pattern, $date));
echo ' ';
var_dump(checkdate($items[1], $items[2], $items[0]));
echo '<br />';
}