xsd 正则表达式验证失败

xsd validation failing for regular expression

我使用下面的 simpleType 只允许 5 种类型的词。这工作正常。但问题是,如果我在字符串末尾仅附加一个大写字符,它就会失败。

请帮我解决这个问题。

<xsd:simpleType name="UpdateMemberPhysicalCardTypeType">
                    <xsd:annotation>
                        <xsd:documentation>
                            Type for physical data type
                        </xsd:documentation>
                    </xsd:annotation>
                    <xsd:restriction base="xsd:string">
                        <xsd:pattern value="([PERMANENT|TEMPORARY|NOT CARDED|RETAIL CARD|VIRTUAL CARD])*"/>
                    </xsd:restriction>
            </xsd:simpleType>

成功案例: <typ:PhysicalCardType>PERMANENT</typ:PhysicalCardType> -> 工作正常

<typ:PhysicalCardType>PERMANENTqwer</typ:PhysicalCardType> -> 出现错误。它工作正常。

失败案例: <typ:PhysicalCardType>PERMANENTD</typ:PhysicalCardType> -> 没有收到错误。这是行不通的。它允许这个词。应该不允许这个。

这就是你想要的。

<xsd:pattern value="PERMANENT|TEMPORARY|NOT CARDED|RETAIL CARD|VIRTUAL CARD"/>

这里有一个关于此事的有用页面:http://www.regular-expressions.info/xml.html

正则表达式网站 http://www.regular-expressions.info/xml.html,我经常使用它,解释说 正则表达式模式匹配找到匹配项的第一个实例。在这种情况下,您已指示它匹配 PERMANENT,然后,因为您已将他的语句包含在 ()* 中,所以它会循环。我不知道为什么您的验证例程允许 PERMANENTD,但您显示的正则表达式应该允许 PERMANENTTEMPORARY 作为有效条目,我不确定您是否想要那个。

当我想在 XML 模式中枚举一组特定的允许值和互斥值时,我使用枚举,如下所示:

<xs:simpleType name="UpdateMemberPhysicalCardTypeType">
  <xs:restriction base="xs:string">
    <xs:enumeration value="PERMANENT" />
    <xs:enumeration value="TEMPORARY" />
    <xs:enumeration value="NOT CARDED" />
    <xs:enumeration value="RETAIL CARD" />
    <xs:enumeration value="VIRTUAL CARD" />
   <xs:enumeration value="list-session" />
  </xs:restriction>
</xs:simpleType>