Ian*_*oyd 6 regex xsd xsd-validation
我正在尝试在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我输入:
<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})|('')" />可以解决问题的任何其他模式解决问题 - 某些特定模式 - 是空的
奖励:任何人都可以指向XSD文档中\d与匹配数字匹配的位置吗?或者其他特殊模式代码是什么?
alp*_*use 11
我可能会猜测,模式应该看起来像是\d{8}|"八位数字或什么都没有",而不是八位数或两位数.但是这没有解释,为什么20101111不匹配.您确定元素值中没有空格或其他符号吗?
\d据说匹配"F.1.1角色类逃脱"部分中的数字
| 归档时间: | 
 | 
| 查看次数: | 15700 次 | 
| 最近记录: |