下面的simpleType有一个模式值= "[^\*]*"
,它拒绝字符串中出现任何星号,这是我们指定用于清空相应数据库列的字符:
<xsd:simpleType name="StringMin1Max80TypeBase">
<xsd:restriction base="xsd:string">
<xsd:minLength value="1"/>
<xsd:maxLength value="80"/>
<xsd:pattern value="[^\*]*"/>
</xsd:restriction>
</xsd:simpleType>
我们的一些simpleTypes没有此模式值,以便人们可以输入*
。有人最近提交了一个具有上述类型的元素,该元素具有以下字符串:**WARNING**
,因此该元素被无意中拒绝。有没有办法允许连续的字符,如**
或***
等,但拒绝恰好一个字符的外观?我知道XML Schema正则表达式不使用负向lookbehind和负向前瞻,并且模式值中不允许使用字符<
和?
。
如果可以,那么如何允许*string*
,即多个字符而不是一个?
非常感谢。
答案 0 :(得分:1)
所以你只想确定要么是星号还是两个或更多星号?这应该这样做:
<xsd:pattern value="([^*]*\*){2,}[^*]*"/>
这是我提出的第二个问题,但我意识到它也回答了你的第一个问题。
更新:根据下面的评论,正则表达式还需要匹配一个完全没有星号的字符串。不是问题;只需添加一个与一个或多个非星号字符匹配的替代方法:
<xsd:pattern value="([^*]*\*){2,}[^*]*|[^*]+"/>