在XSD中的限制中指定多个模式

Ksh*_*rma 3 java regex xml xsd

我有以下XSD元素:

<xsd:element name="password">
    <xsd:simpleType>
        <xsd:restriction base="xsd:string">
            <!-- Length check -->
            <xsd:pattern value=".{9,12}" />
            <!-- Format check -->
            <xsd:pattern value=".*\d{2,}.*" />
            <xsd:pattern value=".*[A-Z]{1,}.*" />
            <xsd:pattern value=".*[a-z]{1,}.*" />
            <xsd:pattern value=".*\p{Punct}.*" />
        </xsd:restriction>
    </xsd:simpleType>
</xsd:element>
Run Code Online (Sandbox Code Playgroud)

我想单独应用这些模式.首先应检查长度是否合适.如果是,则检查它至少有2位数,依此类推.相反,它将所有表达式连接在一起并尝试将它们一起应用.

这是非常糟糕的设计.如果只允许一个模式,<xsd:restriction>则应将基数定义<xsd:pattern>1.允许多次<xsd:pattern>给人的印象是支持多种模式.

有没有办法将多个模式应用于XSD元素?

kjh*_*hes 5

支持每个限制的多个模式,但它们并不意味着AND; 他们的意思是OR:

注意:<restriction>包含多个<pattern>元素的XML 在集合中产生单个正则表达式.这个·正则表达式·是正则表达式的"或",它们是<pattern>元素的内容.

如果要同时应用多个正则表达式约束,请将它们写在一个中<pattern>.

对于最小/最大长度约束,而不是使用<pattern>,请考虑使用<minLength><maxLength>facet.