Recentemente, descobri que precisava validar uma entrada de data / hora e decidi usar regex para realizar a tarefa. Uma vez que o valor deve ser inserido em uma coluna MySQL do tipo datetime, o regex abaixo funciona perfeitamente:
^([0-9]{2,4})-([0-1][0-9])-([0-3][0-9])(?:( [0-2][0-9]):([0-5][0-9]):([0-5][0-9]))?$
A expressão regular também aceitará uma data pura (2012-09-28) ou uma data + hora (2012-09-28 21:00:00).