【发布时间】:2024-01-20 03:54:01
【问题描述】:
我正在尝试为必须包含四个字母数字(仅限大写)而不是全数字组合的元素编写 XML Schema 数据类型。
换句话说,一个由四个 A-Z 或 0-9 组成的序列,至少包含一个 A-Z。
这是我遇到困难的后一部分,“至少一个”或“但不是”。
我已经想过和/或尝试过:
字符类减法(但我认为这里没有办法定义“类”?)
<!-- no example -->
结合 2 xs:restrictions
<xs:restriction>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[0-9A-Z]{4}"/>
</xs:restriction>
</xs:simpleType>
<xs:pattern value="[^(\d\d\d\d)]"/>
</xs:restriction>
在两种数据类型中组合 2 个 xs:patterns
<xs:simpleType name="4alpha-at-least-one-letter">
<xs:restriction base="my-namespace:FourAlphanumericsType">
<xs:pattern value="[^(\d\d\d\d)]"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="FourAlphanumericsType">
<xs:restriction base="xs:string">
<xs:pattern value="[0-9A-Z]{4}"/>
</xs:restriction>
</xs:simpleType>
我猜这些都是死胡同,我要么在正则表达式世界中遗漏了一些东西,要么 XML 正则表达式可能不是最好的方法?
【问题讨论】:
-
你必须拼出正则表达式:
"[A-Z][A-Z0-9]{3}|[A-Z0-9][A-Z][A-Z0-9]{2}|[A-Z0-9]{2}[A-Z][A-Z0-9]|[A-Z0-9]{3}[A-Z]",因为你不能在这里使用前瞻。
标签: regex xml xsd logic alphanumeric