Ora ho capito, ma ti faccio notare che il tuo script accetta anche date del tipo:
g/m/aa
m/g/aa
gg:mm:aaaa
ggXmmXaa
ecc.
Inoltre i valori di DateFormat possono essere "it" e "en" non "IT" e "EN" come da te prospettato.

Ecco una prima bozza:
codice:
function verifyDateFormat(DateString, DateFormat) {
  var match;
  var tmpDate;
  var gg='',mm='',aa='';

  var RE = new Array();
  RE['it'] = /^([0-3]\d)[\/\.]([01]\d)[\/\.](\d{4})$/
  RE['en'] = /^([01]\d)[\/\.]([0-3]\d)[\/\.](\d{4})$/
  RE['gen'] = /^(\d{4})[\/\.]([01]\d)[\/\.]([0-3]\d)$/

  if(!match=DateString.match(RE[DateFormat]) {
    return false;

  switch(DateFormat) {
    case "it":
      gg = match[0];
      mm = parseInt(match[1])-1;
      aa = match[2];
      break;
    case "en":
      mm = parseInt(match[0])-1;
      gg = match[1];
      aa = match[2];
      break;
    case "gen":
      aa = match[0];
      mm = parseInt(match[1])-1;
      gg = match[2];
      break;
  }
  tmpDate = new Date(aa, mm, gg);
  return (tmpDate.getMonth()+1==mm) && (tmpDate.getDate()==gg) && tmpDate.getFullYear()==aa;
}
Nota che ho cambiato la struttura dello script, ma ho tenuto il significato delle variabili e i parametri di ingresso e uscita.
Ho messo un controllo anche sull'anno (che nella tua funzine non c'era), mentre ho eliminato il controllo su "e" che credo sia sintassi proprietaria.