たとえば、電話番号を含む文字列を検証して、最初に「+」、次に2桁の数字、次に数字のシーケンス、またはハイフンまたはスペースのいずれかの単一インスタンスを適用したいとします。文字列は数字で終わる必要があります。
私は現在持っています:
<xs:pattern value="\+\d{2}[- ]?[\d -]+[\d]"/>
ただし、これは文字列内のスペースまたはハイフンの繰り返しを制限するものではありません。これはどのように達成できますか?
「...次に、数字のシーケンス、またはハイフンまたはスペースのいずれかの単一インスタンス」と言います。これは、文字通り、次のすべてが受け入れられることを示しています(スペースで終わる文字列を引用します)。
"+01 "
+01-
+4312345678912345678900
あなたのコードを見ると、あなたは非公式に話していたと思います。あなたが望むものは、プラス、2桁、そして最大で1つのハイフンまたはスペースで中断された一連の数字として説明する方がよいでしょう。それが正確な言い換えである場合は、試してみてください
\+\d{2}\d*[- ]?\d+
最大1つのハイフンと最大1つのスペースを許可する場合、それははるかに複雑になりますが、それでも表現可能です。空の数字のシーケンスを受け入れたくないと仮定します。
\+\d{2}(\d+|(\d*(-\d+| \d+)?))
[未検証。]