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>
我使用下面的 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>