`isISO8601` misroutes signed ordinal dates

Abierto Apto para principiantes
#2,860 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
84/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
javascript
Área
backend

Línea de trabajo

Comienza en los puntos de entrada isISO8601 y isValidDate, centrándote en la expresión regular para fechas ordinales mostrada en el issue. Ejecuta los ejemplos de Node proporcionados después de instalar validator@13.15.35 y, a continuación, verifica que las fechas ordinales con signo utilicen la rama ordinal, que los ejemplos válidos pasen, que los valores de día del año no válidos fallen y que el comportamiento sin signo siga siendo correcto.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

🐛 bug

Describe the bug

The ordinal-date branch in isValidDate matches with

const ordinalMatch = str.match(/^(\d{4})-?(\d{3})([ T]{1}\.*|$)/);

That pattern has no sign prefix, although the main isISO8601 regex accepts a
leading + or - on the year. A signed ordinal date therefore fails this
match and falls through to the calendar branch, where the generic
(\d{4})-?(\d{0,2})-?(\d*) split cuts the three-digit day-of-year into a
two-digit month and a one-digit day.

The result is that day-of-year is never validated for signed ordinal dates, and
some valid ones are rejected outright.

Examples

const validator = require('validator'); // 13.15.35

// Day 145 of 2009 exists, but the split reads month 14, day 5 and rejects it
validator.isISO8601('+2009-145', { strict: true }); // false, expected true

// Day 130 exists too; here the split reads month 13, day 0, the guard falls
// through, and it is accepted without any check
validator.isISO8601('+2009-130', { strict: true }); // true, unvalidated

// Unsigned ordinals take the intended branch and behave correctly
validator.isISO8601('2009-145', { strict: true });  // true

Reproductions

The Examples block above runs as-is on Node after
npm install validator@13.15.35; no harness or scaffolding needed.

Additional context

Adding [+-]? to the ordinal pattern would route these to the branch that
already handles them, including the leap-year bound on line 19.

Validator.js version: 13.15.35
Node.js version: v26.7.0
OS platform: Linux

Lenguaje dominante
JavaScript
Estrellas
23.7k
Forks
2.5k
Métricas de merge de PR
Sin PR fusionados en 30 d

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de validatorjs/validator.js

Todos los issues de validatorjs/validator.js

Issues similares

Más issues de JavaScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.