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/


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);

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/

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.