首页 > 解决方案 > RegEx 限制 XSD 文件的 UTF-16 代码单元的数量

问题描述

我正在为需要发送到旧系统的 XML 文件处理 XSD 文件。此遗留系统具有以# of UTF-16 代码单元指定的字段大小限制。

例如,该字段description包含的 UTF-16 代码单元不得超过 35 个。

我现在正在尝试提出一个可以放入 XSD 的正则表达式,以便将相应的字段值限制为最多包含 35 个 UTF-16 代码单元。

我的第一次尝试是这样的:

    <xs:element name="description">
        <xs:annotation>
            <xs:documentation>A description for the document</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
            <xs:annotation>
                <xs:documentation>A sequence of up to 35 UTF-16 code units</xs:documentation>
            </xs:annotation>
            <xs:restriction base="xs:string">
                <xs:pattern value="^(|([\x{0}-\x{FFFF}][\x{0}-\x{FFFF}]|[\x{10000}-\x{10FFFF}]){0,17}[\x{0}-\x{FFFF}]?|[\x{0}-\x{FFFF}]?([\x{0}-\x{FFFF}][\x{0}-\x{FFFF}]|[\x{10000}-\x{10FFFF}]){0,17})$"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>

这个正则表达式背后的一些背景:

我的(失败的)想法是实施这个限制:

但显然,这对于像aaa在两个星体平面字符之间有一个 BMP 字符这样的字符串来说是失败的。

是否有另一种方法可以限制 XSD 文件中 UTF-16 代码单元的数量?

标签: regexunicodexsd

解决方案


推荐阅读