用于指定ASCII范围的XML Schema正则表达式

时间:2013-01-29 22:23:41

标签: regex xsd schema w3c

我正在尝试使用正则表达式和xsd:pattern设置限制,以仅允许属于特定范围的ASCII值且最多包含10个字符的字符。特别是从ASCII值33到126。

截至目前,我有以下代码片段,我正在尝试修改。

<xsd:simpleType name="Name">
    <xsd:restriction base="xsd:string">
        <xsd:pattern value="[(\p{L}|\d)._-]{0,9}"/>
    </xsd:restriction>
</xsd:simpleType>

我的另一个选项是在正则表达式中列出33到126之间的各个ASCII字符。截至目前,我拒绝走这条路。

2 个答案:

答案 0 :(得分:2)

使用类似[!-~]{0,10}的范围应该可以解决问题。

答案 1 :(得分:2)

为避免列出所有选项,您可以使用范围(如Ismail Ghalimi已建议的那样):

<xsd:pattern value="[!-~]{0,10}"/> 

或者,由于您列出的范围基本上是ASCII中的整个非空白字符集,因此您可以使用Unicode块名称Basic Latin和简单的字符类减法。您可以将长度约束移动到单独的方面:

<xsd:maxLength value="10"/>
<xsd:pattern value="[\p{IsBasicLatin}-[\s]]*"/>

请注意,在XSD中,正则表达式是在没有锚点的情况下编写的,所以在开头不需要^而在结尾没有$:模式匹配整个文字,或者文字不是类型有效的。