... aggiungendo delle parentesi non mi da più errore, e fa il controllo, ma mi restituisce sempre falese (anche se questa volta supera l'if).
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;
  }
  alert("punto 1");
  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;
}

var a="31/12/2004";
alert(verifyDateFormat(a, "it") );
Ho inserito un alert per verificare fino a dove arriva lo script