1

样品 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,0000 等不应该被允许
10 有效并且应该被允许

4

3 回答 3

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>

现在该模式需要一个非零字符(在允许的字符类之外)。

于 2012-11-19T10:01:44.410 回答
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 字符的约束。

于 2012-12-08T01:32:40.050 回答
0

怎么样

<xsd:pattern value="[a-zA-Z1-9\-]|[a-zA-Z0-9\-]{2,17}"/>

于 2012-11-19T12:45:09.600 回答