He estado trasteando un poco con el objeto date() y creo que lo he conseguido:
Código PHP:
function esFecha(formu)
{
var elDia=formu.txt_dia.value
var elMes=formu.txt_mes.value-1
var elAnio=formu.txt_anio.value
var ff = new Date(elAnio, elMes, elDia)
if ( ff.getDate() != elDia ) return false
if ( ff.getMonth() != elMes ) return false
if ( ff.getFullYear() != elAnio ) return false
return true
}
Al usar el propio objeto de javascript él se encarga de verificar que la fecha es real (si, por ejemplo, metes 31 de abril, él lo convierte en 1 de mayo, con lo cual al comparar da desigual).
También parece que acepta indistintamente valores de 1 dígito o 2.
Pruébalo a ver si en efecto es "a prueba de bomba", pero me parece que así es.
¡Suerte!