La respuesta "aceptada" a esta pregunta es incorrecta y miope.
No es correcto, ya que coincidirá con cadenas como 0001
, que no es un año válido.
Es miope en cuanto a que no coinciden con valores superiores a 9999. ¿Ya hemos olvidado las lecciones de Y2K? En su lugar, utilice la expresión regular:
^[1-9]\d{3,}$
Si usted necesita emparejar años en el pasado, además de años en el futuro, se podría utilizar esta expresión regular para que coincida con cualquier número entero positivo:
^[1-9]\d*$
Incluso si no espera fechas del pasado, puede utilizar esta expresión regular de todos modos, en caso de que alguien invente una máquina del tiempo y quiera llevarse su software con ellas.
Nota: Esta expresión regular coincidirá con todos los años, incluidos los anteriores al año 1, ya que normalmente se representan con una designación de BC en lugar de un entero negativo. Por supuesto, esta convención podría cambiar en los próximos milenios, por lo que su mejor opción es para que coincida con cualquier número entero positivo o negativo, con la siguiente expresión regular: Respuesta
^-?[1-9]\d*$
fwiw creé un proyecto Node.js, [ to-regex-range] (https://github.com/jonschlinkert/to-regex-range) para crear automáticamente estos rangos. Es más difícil de lo que parece si necesita generar la expresión regular para probar durante un rango de años. – jonschlinkert