Per quanto riguarda la validazione sintattica:
/(\d{2}[\/\.]){2}\d{4}/
Oppure, piu` selettiva:
/([0-2]\d)|(3[01])[\/\.](0[1-9])|(1[0-2])[\/\.](19)|(20)\d{2}/

Invece per una validazione semantica, puoi trasformare la stringa in oggetto Date() e quindi controllare se i singoli pezzi coincidono:
codice:
function checkdate(origstr) {
  if(!origstr.match(/(\d{2}[\/\.]){2}\d{4}/) {
    alert("formato non corretto");
    return false;
  }
  var pezzi = origstr.split([\.\/]);
  var ogg = new Date(pezzi[2], parseInt(pezzi[1])-1, pezzi[0]);
  if(parseInt(pezzi[2]) != ogg.getFullYear()) {
    alert("anno sbagliato");
    return false;
  }
  if(parseInt(pezzi[1]) != ogg.getMonth()+1) {
    alert("mese sbagliato");
    return false;
  }
  if(parseInt(pezzi[0]) != ogg.getDate()) {
    alert("giorno sbagliato");
    return false;
  }
  return true;
}
Nota: nessuno di questi metodi ti puo` controlalre di non aver confuso il 3 febbraio con il 2 marzo e sim.