Sigues teniendo el código mal. Fallará en los años 2017, 2018 y 2019.
La línea correcta es:
Using javascript Syntax Highlighting
var er_mes28dias = /^([1-2]0|[0-2][1-8]|[0-1]9|[0-9])\/(02|2)\/(1999|200[1-3]|200[5-7]|2009|201[0-1]|201[3-5]|201[7-9])$/
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Por otra parte, sería mucho mejor hacer la cuenta de
cuándo un año es bisiesto:
Un año es bisiesto si es divisible entre 4, excepto el último de cada siglo (aquel divisible por 100), salvo que este último sea divisible por 400.Así, te vale para más allá del 2020 (suponiendo que entonces siga siendo válido el calendario Gregoriano).
Para obtener la fecha correcta, debes recuperar los valores capturados por la última expresión regular evaluada, analizando el objeto RegExp. Por ejemplo, después del if() de la línea 37, suponemos que tenemos una fecha válida. Entonces solo hay que capturar sus componentes como algo como
/(\d+)\/(\d+)\/(\d+)/y obtenerlos con
var year = RegExp.$1
var month = RegExp.$2
var day = RegExp.$3Y entonces ya puedes reordenarlos como quieras.