2

我在默认的 2.3 架构中看到TS和数据类型:DT

<SegmentStructure name='SMPL' description='Patient Identification'>
    <SegmentSubStructure piece='1' description='A sample datetime field' datatype='DT' max_length='12' required='O' ifrepeating='0'/>
</SegmentStructure>

<DataType name='TS' description='time stamp'>
    <DataSubType piece='1' description='time of an event' datatype='ST'/>
    <DataSubType piece='2' description='degree of precision' datatype='ST'/>
</DataType>

<DataType name='DT' description='Date (2.8.13)'>
    <DataSubType piece='1' description='Date (2.8.13)'/>
</DataType>

但它似乎并没有真正验证格式。这可能吗?我们最近有一个例子,客户正在发送一个缺少数字的时间戳(例如 20160503120)。如果可以的话,我想用模式验证这一点。

编辑: 希望添加一些澄清

我们使用,当 ADT 进入时,它会通过带有扩展名的验证器.hl7。默认情况下,这是2.3.hl7或类似的(取决于版本)。它看起来就像上面的代码。我想知道我是否可以以某种方式将正则表达式放在那里。在段结构定义 (SMPL) 或数据类型定义中。

4

3 回答 3

1

根据 HL7 v2 的规范(参见http://www.hl7.eu/refactored/dtDTM.html),DT 的格式为:YYYY[MM[DD[HH[MM[SS[.S[S[S] [S]]]]]]]]][+/-ZZZZ]。

因此,正确的正则表达式将是:

^((\d{2}){2,7}|\d{14}.\d{1,4}([+-]\d{4})?)$

但是,如果您谈论的是 TS 数据类型,它可能包含插入符号和精度指示符。

在这种情况下,正则表达式可能是:

^((\d{2}){2,7}|\d{14}.\d{1,4}([+-]\d{4})?)(\^[YLDHMS])?$

这只是第一次筛选,因为实际的日期/时间值没有得到验证。

更新:

我最近对 ​​DT 使用了以下正则表达式,它完全验证日期、时间和区域值,并分组返回每个组件:

^((?:19|20)[0-9]{2})(?:(1[0-2]|0[1-9])(?:(3[0-1]|[1-2][0-9]|0[1-9])(?:([0-1][0-9]|2[0-3])(?:([0-5][0-9])(?:([0-5][0-9](?:\.[0-9]{1,4})?)?)?)?)?)?)?([+-](?:[0-1][0-9]|2[0-3])[0-5][0-9])?$
于 2018-02-13T21:39:11.223 回答
0

您可以将正则表达式添加到架构中。这是来自 v3 模式的完整 TS 正则表达式:

[0-9]{1,8}|([0-9]{9,14}|[0-9]{14,14}.[0-9]+)([+-][0-9 ]{1,4})?

于 2016-08-18T19:42:19.210 回答
0

v2 文档具有以下优点:

YYYY[MM[DD[HH[MM[SS[.S[S[S[S]]]]]]]]][+/-ZZZZ]

括号表示可选部件。也许只看断点?像这样的东西?假设您首先拆分时区,然后将其传递给您实际用于解析日期的任何内容。

switch (datePart.length) {
case 4:
  return parseDate(datePart, "YYYY");
case 6:
  return parseDate(datePart, "YYYYMM");
case 8:
  return parseDate(datePart, "YYYYMMDD");
case 10:
  return parseDate(datePart, "YYYYMMDDHH");
case 12:
  return parseDate(datePart, "YYYYMMDDHHmm");
case 14:
  return parseDate(datePart, "YYYYMMDDHHmmss");
case 16:
  return parseDate(datePart, "YYYYMMDDHHmmss.S");
case 17:
  return parseDate(datePart, "YYYYMMDDHHmmss.SS");
case 18:
  return parseDate(datePart, "YYYYMMDDHHmmss.SSS");
default:
  return undefined;
}
于 2016-09-05T20:26:00.707 回答