Puoi provare questo....

codice:
<script language="JavaScript" type="text/javascript">
<!--
function ctlData(data) {
 //---------- Si prova a fare il match su un valore +/- valido
 re= /^([0-3][0-9])\/([0-9]{2})\/([0-9]{4})$/;
 risultato = data.match(re);
 if (risultato == null) {
  return false;
 } else {
  //
	var chkData = new Date();
	//-------- risultato č un array che nel 1° posto (indice 0) 
	//         contiene il valore del parametro data
	//         nel secondo il giorno, nel terzo il mese e nel quarto l'anno
	//-------- Anno 	
	chkData.setFullYear(risultato[3]);
	//-------- Mese : Meno 1 xche Gennaio č il mese 0 !!!
	chkData.setMonth(risultato[2] - 1);
	//-------- Giorno
	chkData.setDate(risultato[1]);
	//-------- A questo punto, il js ha risettato la data se ad esempio immetto 
	//         32/12/2004 mi ritornerā 01/01/2005
	//-------- Adesso confronto i dati della mia data con i dati dell'array
	//-------- Giorno
	if (chkData.getDate() != risultato[1]) {
	 return false;
	} // if (chkData.getDate() != risultato[1]) 
	//-------- Mese
	if (chkData.getMonth() != risultato[2] - 1) {
	 return false;
	}	// if (chkData.getMonth() != risultato[2] - 1) 
	//-------- Anno
	if (chkData.getFullYear() != risultato[3]) {
	 return false;
	}	// if (chkData.getFullYear() != risultato[3])
	//-------- A questo punto nessun errore
  return true;
 } //  if (risultato == null) 
}
alert(ctlData('31/12/2004'));
alert(ctlData('16/02/2005'));
//
alert(ctlData('33/11/2004'));
alert(ctlData('01/13/2004'));
alert(ctlData('3/2/2004'));
alert(ctlData('03/02/04'));


//-->
</script>