【发布时间】:2011-05-12 18:17:40
【问题描述】:
我正在尝试在 XSD 中定义一个方案规则,其字符串长度为 8 个字符:
<PostedDate>42183296</PostedDate>
也允许空格填充:
<PostedDate> </PostedDate>
这将我带到了 XSD:
<xs:simpleType name="DateFormat">
<xs:restriction base="xs:string">
<xs:length value="8" /> //exactly 8 characters long
</xs:simpleType>
但值也可以为空(即零个字符长):
<PostedDate></PostedDate>
<PostedDate />
这导致我天真地尝试:
<xs:simpleType name="DateFormat">
<xs:restriction base="xs:string">
<xs:length value="8" /> //exactly 8 characters long
<xs:length value="0" /> //exactly 0 characters long
</xs:simpleType>
这当然是不允许的。
与 XSD 中的常见情况一样,大多数格式无法用 XSD 轻松表示,因此我选择尝试正则表达式规则:
.{8} | ""
试图转换为 XSD 的 i 类型:
<xs:simpleType name="DateFormat">
<xs:restriction base="xs:string">
<xs:pattern value=".{8}|''" />
</xs:restriction>
</xs:simpleType>
但它不起作用:
''20101111' is not facet-valid with respect to pattern '.{8}|''' for type 'DateFormat'
我也试过了
<xs:pattern value="[0-9]{8}|''" /><xs:pattern value="([0-9]{8})|('')" /><xs:pattern value="(\d{8})|('')" />
其他任何人都可以解决匹配问题的模式吗 - 一些特定的模式 - 空
奖励:谁能指出the XSD documentation 中说\d 匹配数字的地方?或者其他特殊的模式代码是什么?
【问题讨论】:
-
我认为
\d{8}?应该可以工作。?表示前面的内容是可选的。
标签: regex xsd xsd-validation