1

我很难阅读具有以下格式的日期和时间的字符串:

YYYYMMDDHHmmSS.FFFF[+|-]ZZzz
  • YYYY是年,
  • MM是月份(从 01 到 12 开始),
  • DD是第 (01-31) 天,
  • HH是小时 (00-23),
  • mm是分钟 (00-59),
  • SS是第二个(00-59),
  • FFFF是秒 (0000-9999) 的分数,
  • ZZzz是“与协调世界时 (UTC) 的小时(ZZ – 值从 +14 到 –12)和分钟(zz – 值 00 到 59)的差异。”

这是在 HL7 中传输日期时间信息的标准,但不要担心。我遇到的问题是处理我为此标准编写的正则表达式的系统拒绝让我在第二个字段后面添加点。它也不允许 ZZ 字段之前的加号或减号。

这是我写的正则表达式:

/^(1|2)\\d{3}(0[1-9]|1[0-2])(0[1-9]|(1|2)[0-9]|3(0|1))((0|1)[0-9]|2[0-3])[0-5][0-9][0-5][0-9]\\.\\d{4}((\\+|\\-)0[0-9]|\\-1[0-2]|\\+1[0-4])[0-5][0-9]$/

它适用于 Limesurvey,适用于给定问题的验证字段。如果你不知道那是什么,只要知道它的正则表达式使用 Perl 约定即可。

请注意,如果我删除 \. 或 \+ \-,它工作得很好(除了正则表达式不再强制执行标准)。我也尝试过不转义反斜杠,但这也无济于事。

如果有人能指出为什么这不起作用,我将不胜感激。请注意,如果正则表达式中有任何看起来奇怪或多余的东西,那很可能是我在逻辑上将其分解为各个字段以便于阅读。

4

1 回答 1

1

在 +14 到 -12 部分之前,我几乎没有改变你的正则表达式。我不太你可以在这里看到它:http ://www.regex101.com/r/jF1bA9

最终正则表达式:

^(1|2)[0-9]{3}(0[1-9]|1[0-2])((0[1-9])|((1|2)[0-9])|3(0|1))((0|1)[0-9]|2[0-3])([0-5][0-9])([0-5][0-9])\.[0-9]{4}(\+0[0-9]|\+1[0-4]|-0[0-9]|-1[0-2])[0-5][0-9]$

正则表达式解释:

行首: ^ //行首

年:

(1|2)[0-9]{3}

月:

(0[1-9]|1[0-2])

天:

((0[1-9])|((1|2)[0-9])|3(0|1))

小时:

((0|1)[0-9]|2[0-3])

分钟:

([0-5][0-9])

秒:

([0-5][0-9])

时期:

\.

第二部分:

[0-9]{4}

匹配 +14 到 -12(您可能需要更改的内容)

(\+0[0-9]|\+1[0-4]|-0[0-9]|-1[0-2])

匹配: +14 +13 +12 +11 +10 +09 +08 +07 +06 +05 +04 +03 +02 +01 +00 -00 -01 -02 -03 -04 -05 -06 -07 -08 -09 -10 -11 -12

00 - 59:

[0-5][0-9]

行结束:

$


您可能需要更改它以使用您的特定语言(我看到您在某些区域有双反斜杠,例如\\d

于 2013-01-17T01:13:20.647 回答