リファレンス
正規表現
pattern および patternProperties キーワード は、制約を表現するために正規表現を使用します。使用される正規表現構文は JavaScript の構文です (ECMA 262、特に)。しかし、その完全な構文は広くサポートされているわけではないため、下記で説明されている構文のサブセットを使用することをお勧めします。
- 特殊文字を除く単一の Unicode 文字は、それ自身と一致します。
.:改行文字以外の任意の文字と一致します。(改行文字が何かは、プラットフォームや言語環境によって多少依存しますが、実際にはほとんど問題になりません)。改行を含めるには、正規表現のフラグ/修飾子の使用を避け、多くの正規表現ライブラリで良好にサポートされている(.|\r?\n)*パターンを使用します。^:文字列の先頭でのみ一致します。$:文字列の末尾でのみ一致します。(...):一連の正規表現を単一の正規表現にグループ化します。|:|記号の前または後の正規表現のいずれかと一致します。[abc]:角括弧内の任意の文字と一致します。[a-z]:文字の範囲と一致します。[^abc]:リストされていない任意の文字と一致します。[^a-z]:範囲外の任意の文字と一致します。+:先行する正規表現の1回以上の繰り返しと一致します。*:先行する正規表現の0回以上の繰り返しと一致します。?:先行する正規表現の0回または1回の繰り返しと一致します。+?、*?、??:*、+、および?修飾子はすべて貪欲です。可能な限り多くのテキストと一致します。場合によっては、この動作が望ましくないことがあり、可能な限り少ない文字と一致させたい場合があります。(?!x)、(?=x):否定先読みと肯定先読み。{x}:先行する正規表現の正確にx回の出現と一致します。{x,y}:先行する正規表現の少なくともx回、多くともy回の出現と一致します。{x,}: 直前の正規表現にx回以上のマッチ。{x,y}?,{x,}?: 上記表現の非貪欲バージョン。\n、\r、\tなどの標準エスケープのみを使用し、JSONエスケープも必要であることに注意してください。
例
次の例は、オプションの市外局番付きのシンプルな北米電話番号にマッチします。
{ "type": "string", "pattern": "^(\\([0-9]{3}\\))?[0-9]{3}-[0-9]{4}$"}
データ
"555-1212"
データ
"(888)555-1212"
データ
"(888)555-1212 ext. 532"
データ
"(800)FLOWERS"
次の例では、文字列が{{で始まり}}で終わり、複数行文字列も許可されていることを確認します。
データ
{ "type": "string", "pattern": "^\\{\\{(.|[\\r\\n])*\\}\\}$", }
データ
"{{ foo\nbar }}"
データ
"{ foo }"