我有一个 XSD 架构,其中包含特定字段的规则以匹配以下正则表达式:
\d{8}[\-]?[A-Za-z]{0,3}
使用 irb,我可以使用这个正则表达式进行测试,并且以下字符串都匹配,这是正确的:
12345678
12345678-
12345678-abc
12345678abc
当我尝试针对此 XSD 验证某些 XML 时,我得到的行为略有不同:
Passes:
12345678-
12345678-abc
12345678abc
Fails:
12345678
这是一个最小的 XSD/XML 文件,它重现了这个:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="codeType">
<xs:restriction base="xs:token">
<xs:pattern value="\d{8}[\-]?[A-Za-z]{0,3}"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="test">
<xs:complexType>
<xs:sequence>
<xs:element type="codeType" name="code"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
和 XML:
<?xml version="1.0" encoding="UTF-8"?>
<test>
<code>11034755</code>
</test>
并运行它
xmllint --schema test.xsd test.xml
给
Element 'code': [facet 'pattern'] The value '11034755' is not accepted by the pattern '\d{8}[\-]?[A-Za-z]{0,3}'
虽然 XML 模式没有完整的正则表达式,但我认为这应该是有效的。在这种特殊情况下,对于 XSD 文件中的正则表达式,关于“??