【问题标题】:XML Schema regular expression for specifying ASCII range用于指定 ASCII 范围的 XML Schema 正则表达式
【发布时间】:2013-01-29 22:23:41
【问题描述】:

我正在尝试使用正则表达式和 xsd:pattern 进行限制,以仅允许在 ASCII 值的特定范围内最多包含 10 个字符的字符。具体从 ASCII 值 33 到 126。

截至目前,我正在尝试修改以下 sn-p。

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

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

【问题讨论】:

    标签: regex xsd schema w3c


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 迈克尔,你是不是少了一个星号? [\p{IsBasicLatin}-[\s]]*
    【解决方案2】:

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

    【讨论】:

    • 你能举个例子吗?
    • 对不起 - 我打算完全放弃该评论。 XSD 中不需要斜杠、^ 和 $(如果存在,它们被解释为要求字符串应以文字字符串“/^”开头,以 0 到 10 个 ASCII 可打印字符继续,并以文字字符串“$/”)。
    • 是的。 C. M. Sperberg-McQueen 的建议奏效了。 是我选择的。谢谢伊斯梅尔!!
    猜你喜欢
    • 2011-11-26
    • 1970-01-01
    • 2014-08-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-30
    • 1970-01-01
    • 2016-04-07
    • 1970-01-01
    相关资源
    最近更新 更多