Port_Artur, вообще это очень популярная проблема, так что легко нагуглите. Вот вам два варианта:
1)
http://php.ru/forum/viewtopic.php?t=46013
2) без регулярных выражений:
а) проверяете что в переменной есть дефисы (если будут, если не будут, то проверяете, что есть числа и нет букв), если да, то разбиваете ее по дефисам (если их нет, то разбиваем как-то иначе);
б) разбитые данные вносим в функцию -
http://php.net/manual/ru/function.checkdate.php - выполняем;
в) готово.