Xml架构正则表达式不允许单独使用空格

时间:2015-06-16 12:05:56

标签: regex xml xsd

在xml中,我有一个标签<membercode>

该字段的正则表达式模式目前为<xs:pattern value="[a-zA-Z0-9\s]{1,3}" />

会员代码必须接受以下值:

1) "XY"  -> pass

2) "XY " -> pass

3) "   " -> i need to have this failed. but it is getting passed.

4) " XY " -> need to be failed 

编辑:要求:

1)允许的总字符数必须最多为3个。

2)在允许的3个字符中,可以有空格。例如:"XY", "XY "," XY" , "X "

3)但是如果总字符数超过3或者只有空格(没有字母数字字符),那么就不应该允许它。

尝试了空白崩溃属性,但在这种情况下,崩溃完成后应用maxlength。 所以也允许超过最大长度的值。

因此尝试下面的事情..

<xs:pattern value="[a-zA-Z0-9]{1,3}[\s?]" />
<xs:pattern value="[a-zA-Z0-9]{1,3}|[a-zA-Z0-9\s?]{1,3}" />

但无法抓住正确的解决方案。

请指出正确的方法..

非常感谢您的建议!

2 个答案:

答案 0 :(得分:3)

您使用<xs:whiteSpace>限制在正确的轨道上,但值应为preserve,以便不修改原始空格。

您可以使用此模式

[\w\d ]*[\w\d][\w\d ]*

中央部分([\w\d])表示必须出现字母或数字。在该强制字母数字字符之前和之后,该字符串可以选择具有任何字母/数字/空格组合([\w\d ]*)。限制<xs:whiteSpace><xs:maxLength>确保不超过3个长度字符串,包括原始空格。

<xs:element name="elem">
    <xs:simpleType>
        <xs:restriction base="xs:string">
            <xs:whiteSpace value="preserve"/>
            <xs:maxLength value="3"/>
            <xs:pattern value="[\w\d ]*[\w\d][\w\d ]*"></xs:pattern>
        </xs:restriction>
    </xs:simpleType>
</xs:element>

请注意,如果您不想要\w中包含的下划线字符,则可以将a-zA-Z更改为\w

答案 1 :(得分:2)

这应该有效:

[a-zA-Z0-9][a-zA-Z0-9\s]{1,2}

[\w\d][\w\d\s]{1,2} equivalent

<击>

这会帮助你吗?

\s?[\w\d]{1,3}\s?