0

正規表現とxsd:patternを使用して制限を設定し、最大10文字のASCII値の特定の範囲内にある文字のみを許可しようとしています。具体的には、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ブロック名の基本ラテン文字と単純な文字クラスの減算を使用できます。また、長さの制約を別のファセットに移動できます。

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

XSDでは正規表現はアンカーなしで記述されるため、最初に^は不要で、最後に$は必要ありません。パターンがリテラル全体に一致するか、リテラルが型有効ではないことに注意してください。

于 2013-01-30T17:18:27.150 に答える