示例xsd
<xsd:simpleType name="test">
<xsd:restriction base="xsd:token">
<xsd:pattern value="[a-zA-Z0-9\-]{1,17}"/>
</xsd:restriction>
</xsd:simpleType>
如何更改此模式以阻止零。 (有可能)
更多信息:
不应该允许0
不应允许00,000,000等
10有效且应该被允许
答案 0 :(得分:1)
由于XML不支持前瞻,因此对于长度为17的字符串断言此正则表达式可能会非常难看。但我认为你可以将长度约束提取到一个单独的限制:
<xsd:simpleType name="test">
<xsd:restriction base="xsd:token">
<xsd:pattern value="[a-zA-Z0-9\-]*[a-zA-Z1-9\-][a-zA-Z0-9\-]*"/>
<xsd:minLength value="1"/>
<xsd:maxLength value="17"/>
</xsd:restriction>
</xsd:simpleType>
现在模式需要一个非零字符(在允许的字符类之外)。
答案 1 :(得分:1)
如果您的目标不是禁止在令牌中出现0,而只是禁止仅包含零的令牌(因此接受'10'和'01'但是'0','00'等是拒绝),那么也许这会做你想要的:
<xs:simpleType name="test">
<xs:restriction>
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:pattern value="[a-zA-Z0-9\-]{1,17}"/>
</xs:restriction>
</xs:simpleType>
<xs:pattern value=".*[^0].*"/>
</xs:restriction>
</xs:simpleType>
基本思想只是从你已经定义的类型开始,然后通过限制从中派生另一个类型,添加约束,即词法空间的每个成员必须有一个非0的字符。
答案 2 :(得分:0)
怎么样
<xsd:pattern value="[a-zA-Z1-9\-]|[a-zA-Z0-9\-]{2,17}"/>