SCORM 2004时间格式 - 正则表达式?

Dan*_*ard 6 regex time scorm

我正在为LMS构建SCORM 2004 javascript API,SCORM 2004的一个要求是传入它的时间间隔必须遵循以下格式.有谁知道这个正则表达式是什么?我试图围绕它,但无济于事.注意:P必须始终是第一个字符.

P [yY] [mM] [dD] [T [hH] [nM] [s [.s] S]]其中:

  • y:年数(整数,> = 0,不受限制)
  • m:月数(整数,> = 0,不受限制)
  • d:天数(整数,> = 0,不受限制)
  • h:小时数(整数,> = 0,不受限制)
  • n:分钟数(整数,> = 0,不受限制)
  • s:秒数或秒数的分数(实数或整数,> = 0,不受限制).如果使用分数秒,则SCORM进一步将字符串限制为最多2位数(例如,34.45 - 有效,34.45454545 - 无效).
  • 如果存在相应的非零值,则应出现字符文字指示符P,Y,M,D,T,H,M和S.
  • 应支持零填充值.零填充不会更改由一组字符表示的数字的整数值.例如,PT05H相当于PT5H和PT000005H.

示例 -

  • P1Y3M2DT3H表示1年,3个月,2天和3个小时的时间段
  • PT3H5M表示3小时5分钟的时间段

任何帮助将不胜感激.

谢谢!

更新:

我添加了一些必须保留的额外标准 -

  • 指示符P应存在
  • 如果年,月,日,小时,分钟或秒的值为零,则可以省略值和相应的字符文字名称,但除了指示符P之外,还应存在至少一个字符文字指示符和值.
  • 如果不使用所有时间组件(小时,分钟和秒),则应省略指示符T. 零值可以与任何时间组件一起使用(例如,PT0S)

Sha*_*now 5

这是我使用的正则表达式;

^P(?=\w*\d)(?:\d+Y|Y)?(?:\d+M|M)?(?:\d+D|D)?(?:T(?:\d+H|H)?(?:\d+M|M)?(?:\d+(?:\­.\d{1,2})?S|S)?)?$ 
Run Code Online (Sandbox Code Playgroud)