La función moment.js isValid no funciona correctamente

81

Tengo esta pregunta ... No he encontrado nada similar y también parece muy extraño que nadie haya tenido este problema al validar el tiempo con moment.js.

moment('03:55', 'HH:mm').isValid(); //true
moment('03:55jojojo', 'HH:mm').isValid(); //true
moment('03:55jojojo', 'HH:mm',true).isValid(); //true

¿Estoy haciendo algo mal? Aquí hay un ejemplo:

http://jsfiddle.net/vCGAp/145/

Mikel Sánchez
fuente
3
Solo puedo adivinar que prueban explícitamente que el formato que pasa se prueba ... pero no hay verificación para "¿el valor tiene la misma longitud que el formato?" ... Sugeriría intentar enviar un informe de error a moment.js
scunliffe
... ¿Por qué tienes esos personajes extra en primer lugar? ¿Valida correctamente cadenas de fecha más largas con ese formato?
Mathletics
¿Qué quieres decir con personajes extra?
Mikel Sanchez

Respuestas:

178

En su pregunta, escribe que moment('03:55jojojo', 'HH:mm',true).isValid();devuelve verdadero. Esto es incorrecto. Por favor revise su jsfiddle nuevamente.

De http://momentjs.com/docs/

El analizador sintáctico de Moment es muy indulgente y esto puede conducir a un comportamiento no deseado. A partir de la versión 2.3.0, puede especificar un valor booleano para el último argumento para que Moment use un análisis estricto. El análisis estricto requiere que el formato y la entrada coincidan exactamente.

moment('It is 2012-05-25', 'YYYY-MM-DD').isValid();        // true
moment('It is 2012-05-25', 'YYYY-MM-DD', true).isValid();  // false
moment('2012-05-25', 'YYYY-MM-DD', true).isValid();        // true

Puede utilizar tanto el lenguaje como el rigor.

moment('2012-10-14', 'YYYY-MM-DD', 'fr', true);
Jan Sommer
fuente
1
verdadero (índice): 26 verdadero (índice): 27 verdadero (índice): 29 Esta es la salida del registro de la consola: S
Mikel Sanchez
Si verifica su jsfiddle, notará que NO está pasando verdadero como tercer argumento en ninguna parte, pero en su pregunta declara que moment('03:55jojojo', 'HH:mm',true).isValid();devuelve verdadero. Ejecute ese código exacto en su navegador; el resultado es falso.
Jan Sommer
3
Hombre, muchas gracias, este tercer parámetro de verdad, me salvó la vida varias veces, solo quería decir eso ya que siempre sigo volviendo a esta respuesta.
Kadaj
moment ('13 / 13/2000 '). isValid () devuelve verdadero. Debe incluir la designación del formato para que se valide correctamente.
Kentonbmax
Gracias. Finalmente encontré la respuesta correcta. También me falta el tercer parámetro.
Shwe
1

Perdón por necroar esta pregunta de hace 5 años, pero de hecho me topé con un caso en el que monent no funciona correctamente con la documentación, usando la versión 2.24.0.

Formatos

En la imagen podemos ver que, por ejemplo H, solo debería evaluarse a 0 - 23, pero si lo uso moment('01', 'H', true).isValid()todavía obtengo true.

Aquí está el jsfiddle: https://jsfiddle.net/wofgst5v/

knnhcn
fuente