Cuando tengas lista tu función (no te puedo ayudar en expresiones regulares .. no es mi fuerte) .. usa la función checkdate() para verificar si la fecha es de calendario, es decir .. que no te pongan un "31 de febrero" por ejemplo .. Dicha función atiende al "calendario" así que valida una fecha si es real o no.
http://www.php.net/checkdate
(por cierto . .en los comentarios de los usaurios de esta función tienes algunas expresiones regulares para validar cierto formato ...)
Un saludo,