这个问题不是一个正则能轻松搞定的,若纯成正则将巨复杂无比:
<script language=javascript>
String.prototype.isDate = function()
{
   var r = this.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/); 
   if(r==null)return false; var d = new Date(r[1], r[3]-1, r[4]); 
   return(d.getFullYear()==r[1]&&(d.getMonth()+1)==r[3]&&d.getDate()==r[4]);
}
alert("2002-01-31".isDate());
alert("2002-01-41".isDate());
</script>