xsd验证失败的正则表达式

问题描述:

我使用下面的simpleType只允许5种类型的单词。这工作正常。但问题是,它是失败的,如果我只在字符串的末尾附加大写字母的一个字符。xsd验证失败的正则表达式

请帮我解决这个问题。

<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

+0

感谢菲尔·沃尔顿。这工作正常。但是我遇到的另外一个问题是,如果我在字符串的末尾追加一个空格,它就允许。我没有收到错误。 – Ramkumar

+0

示例输入: PERMANENT typ:PhysicalCardType> – Ramkumar

+0

@RamkumarRaghu尝试'' –

正则表达式的网站,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> 
+0

谢谢@ user114622。 – Ramkumar