OpenClinica 用户手册/使用正则表达式创建时间字段
您有时可能需要一个时间字段。但是,OpenClinica 虽然在日期和部分日期方面非常灵活,但没有标准的时间字段类型。这可以通过使用正则表达式来检查字段中的所有条目来解决。
我们希望我们的时间字段能够接受 01:26 或 11:00 或 19:59 或 20:00 或 23:59 等输入,但拒绝 88:99 或 4:6 等条目。首先,让我们关注 20:00 之前的时间值。正则表达式为 **[0-1]\d:[0-5]\d**,这意味着:小时的第一部分是 0 或 1 ([0-1]),后面跟着一个数字 (\d),然后是冒号 (:),后面跟着分钟,范围从 0 到 5 ([0-5]),最后跟着一个数字 (\d)。然后是 20:00 到 23:59 之间的时间。正则表达式非常类似:**2[0-3]:[0-5]\d**,这意味着:以 2 (2) 开头,后面跟着任何 0 到 3 之间的数字 ([0-3]),然后是冒号和分钟,如前所述。最后,将这两者用管道 (|) 结合起来:**[0-1]\d:[0-5]\d|2[0-3]:[0-5]\d**
在 OpenClinica 中测试正则表达式并非易事:您必须将正则表达式放入 XL 表格中并上传。语法会被验证,但结果不会。换句话说,您的表达式可能是正确的,但接受了错误的输入或拒绝了正确的输入。要在 OC 中检查这一点,需要将 CRF 添加到研究事件中,然后尝试不同的值。然后修改正则表达式,上传新版本等,直到结果正常。幸运的是,有一些工具可以为您完成这项工作,其中之一是 http://regexpal.com/。该界面包含两个文本区域:一个用于正则表达式,另一个用于输入。如您在下面的屏幕截图中看到的那样,我在第一个字段中复制了正则表达式,在第二个字段中复制了我要测试的值。
与正则表达式匹配的文本字符串的每一段都用黄色或蓝色突出显示,您立即可以看到该表达式运行良好。
如果您希望使用 regexpal 以类似于 OpenClinica 中使用的方式测试您的正则表达式,您可以将它们包装在文本 "^()$" 中。
^(regexp here)$
此文本限制了正则表达式的处理方式,确保匹配占用整行(OpenClinica 中也有类似的限制)。
因此,OpenClinica 中的正则表达式
regexp: /[0-9]/
在 regexpal 中测试时会变成这样
^([0-9])$
这将匹配
4
但不会匹配
d4
(因为 4 不是该行上唯一的字符)
现在您可以在 XL 表格中使用正则表达式。以通常的方式添加一个项目,并使用 RESPONSE_TYPE(第 N 列)"text",使用 DATA_TYPE(第 T 列)"ST" 来表示字符串。您的正则表达式位于 VALIDATION(第 V 列)中,前面是 "regexp:",并用斜杠括起来。在第 W 列中填写您的 VALIDATION_ERROR_MESSAGE。
就这样,您拥有了自己的时间字段。
当您需要在 CRF 中比较时间时,必须使用数字数据。但在上述情况下,时间字段的类型为 ST,这意味着您无法对它进行任何操作。但如果您愿意牺牲时间格式,您或多或少可以做到这一点。诀窍是使用一个 REAL 类型的字段,然后向其添加一个正则表达式。您能做到吗?令人惊讶的是,您可以。正则表达式是在数据写入数据库之前使用的。
我们将使用的正则表达式是 **regexp: /|[0-1][0-9]\.[0-5][0-9]|2[0-3]\.[0-5][0-9]/**
它的工作方式与之前的正则表达式相同,但现在分隔符是一个点。由于点在正则表达式中有一定的含义,因此您必须在点前面加上一个反斜杠。现在您可以在 XL 表格中使用正则表达式。以通常的方式添加一个项目,并使用 RESPONSE_TYPE(第 N 列)"text",使用 DATA_TYPE(第 T 列)"REAL" 来表示实数。您的正则表达式位于 VALIDATION(第 V 列)中,在第 W 列中填写您的 VALIDATION_ERROR_MESSAGE。
就这样,您拥有了一个可以进行计算的时间字段。