0

我正在尝试使用正则表达式和 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 字符。截至目前,我拒绝走这条路。

4

2 回答 2

3

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

于 2013-01-29T22:36:18.020 回答
3

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

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

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

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

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

于 2013-01-30T17:18:27.150 回答