Ian*_*oyd 6 regex xsd xsd-validation
我正在尝试在XSD中定义一个方案规则,其中一个字符串长度为8个字符:
<PostedDate>42183296</PostedDate>
Run Code Online (Sandbox Code Playgroud)
和空间填充也是允许的:
<PostedDate> </PostedDate>
Run Code Online (Sandbox Code Playgroud)
这让我进入了XSD:
<xs:simpleType name="DateFormat">
<xs:restriction base="xs:string">
<xs:length value="8" /> //exactly 8 characters long
</xs:simpleType>
Run Code Online (Sandbox Code Playgroud)
但该值可以也是空的(即,零字符):
<PostedDate></PostedDate>
<PostedDate />
Run Code Online (Sandbox Code Playgroud)
这让我天真地尝试:
<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>
Run Code Online (Sandbox Code Playgroud)
当然不允许这样做.
与XSD中的情况一样,大多数格式都无法使用XSD轻松表示,因此我选择尝试使用正则表达式规则:
.{8} | ""
Run Code Online (Sandbox Code Playgroud)
尝试转换为XSD我输入:
<xs:simpleType name="DateFormat">
<xs:restriction base="xs:string">
<xs:pattern value=".{8}|''" />
</xs:restriction>
</xs:simpleType>
Run Code Online (Sandbox Code Playgroud)
但它不起作用:
''20101111' is not facet-valid with respect to pattern '.{8}|''' for type 'DateFormat'
Run Code Online (Sandbox Code Playgroud)
我也试过了
<xs:pattern value="[0-9]{8}|''" /><xs:pattern value="([0-9]{8})|('')" /><xs:pattern value="(\d{8})|('')" />可以解决问题的任何其他模式解决问题 - 某些特定模式 - 是空的
奖励:任何人都可以指向XSD文档中\d与匹配数字匹配的位置吗?或者其他特殊模式代码是什么?
alp*_*use 11
我可能会猜测,模式应该看起来像是\d{8}|"八位数字或什么都没有",而不是八位数或两位数.但是这没有解释,为什么20101111不匹配.您确定元素值中没有空格或其他符号吗?
\d据说匹配"F.1.1角色类逃脱"部分中的数字