Estoy construyendo una API de JavaScript SCORM 2004 para un LMS, y uno de los requisitos de SCORM 2004 es que los intervalos de tiempo pasados dentro de este deben seguir el siguiente formato. ¿Alguien sabe cuál sería la expresión regular de esto? Estoy tratando de entenderlo, pero fue en vano. Nota: P siempre debe ser el primer personaje.SCORM 2004 Formato de hora - Expresión regular?
P [aa] [mM] [dD] [T [hh] [nM] [S [.s] S]] donde:
- y: El número de años (entero ,> = 0, no restringida)
- m: El número de meses (entero,> = 0, no restringida)
- d: El número de días (entero,> = 0, no restringido)
- h : El número de horas (entero,> = 0, no restringido)
- n: El nu mber de minutos (entero,> = 0, no restringido)
- s: la cantidad de segundos o fracción de segundos (real o entero,> = 0, no restringido). Si se utilizan fracciones de segundo, SCORM restringe aún más la cadena a con un máximo de 2 dígitos (por ejemplo, 34.45 - válido, 34.45454545 - no válido).
- Los caracteres literales designadores de carácter P, Y, M, D, T, H, M y S aparecerán si el correspondiente valor distinto de cero está presente.
- Se admitirá el relleno cero de los valores. El relleno cero no cambia el valor entero del número representado por un conjunto de caracteres. Para el ejemplo , PT05H es equivalente a PT5H y PT000005H.
Ejemplo -
- P1Y3M2DT3H indica un período de tiempo de 1 año, 3 meses, 2 días y 3 horas
- PT3H5M indica un período de tiempo de 3 horas y 5 minutos
Cualquier ayuda sería muy apreciada.
Gracias!
ACTUALIZACIÓN:
he añadido algunas normas adicionales que deben mantenerse -
- El designador P estará presente
- Si el valor de años, meses, días, horas, minutos o segundos es cero, el valor y la correspondiente designación literal de carácter pueden ser omitidos, pero al menos un carácter r designador literal y valor será presente además del designador P
- El designador T deberá omitirse si no se utilizan todos los componentes de tiempo (horas, minutos y segundos).Un valor cero puede ser utilizado con cualquiera de los componentes de tiempo (por ejemplo, PT0S)
adapté esto para ColdFusion, y yo encontrado lo que creo que es un error (al menos en CF) para la parte de "segundos". Creo que la parte de los segundos debe ser (\ d + (?: \. \ D {1,2})? S | S)? – hairbo