Firebase セキュリティ ルールの正規表現

正規表現リテラルを使用して、クライアントが指定した文字列を検証できます。 string.matches(/pattern/)を使用して、文字列が正規表現パターンに従っているかどうかをテストします。正規表現の構文は、特に次のような一般的な正規表現の構文と同一ではありません。

  • * + . ( ) [ ] { } \通常どおり動作します。
  • ^$アンカーは、パターン内の最初または最後の文字と一致するために使用している場合にのみ機能します。
  • i (大文字と小文字を区別しない) 修飾子フラグのみがサポートされています

リテラル

正規表現リテラルは/pattern/表記を使用してセキュリティ表現に導入されます。文字列が正規表現パターンに従っているかどうかをテストするには、string のmatches メンバー関数を使用します。次の一致ルールは、新しいデータが文字列 foo で始まるかどうかをチェックします。

".validate": "newData.val().matches(/^foo/)"

サポートされている機能

Firebase は、一般的な正規表現機能のサブセットのみをサポートします。ただし、正規表現の構文には馴染みがあるはずです。

サポートされている記号は次のとおりです。

キャラクター意味
\s \w \d \S \W \D空白、単語文字、数字、およびそれらの否定を (それぞれ) 照合するための事前定義された文字セット
\エスケープすると、その後の文字は文字通り解釈されます。
"" 自体に一致させたい場合は、それもエスケープしてください/\/
^文字列の先頭にアンカーします。これはパターンの最初の文字としてのみ使用できます。
/a/ 「ba」と一致しますが、 /^a/は一致しません。
$文字列の端にアンカーします。これはパターンの最後の文字としてのみ使用できます。
/a/ 「ab」に一致しますが、 /a$/は一致しません。
*前述のパターンの 0 個または多数に一致します。
/^a*$/ 「」および「aaa」に一致しますが、「b」には一致しません
+前述のパターンの 1 つ以上と一致します。
/^a+$/ 「a」および「aaa」に一致しますが、「」には一致しません
?前述のパターンの 0 つまたは 1 つと一致します。
/^a?$/ 「」および「a」に一致しますが、「aa」には一致しません
.どの文字にも一致します
/......../ 「Firebase」に一致します
(pattern)括弧はパターンを単一のユニットにグループ化します
/(ab)*/ 「abab」と一致します
a|b a または b のいずれかに一致します
/a|bc/ 「ac」または「bc」に一致します
[akz]文字セット。含まれている文字のいずれかと一致します。
/[ABCDEF]/ A から F までの大文字のみに一致します。
[az]文字間隔。指定された範囲内のすべての文字を包括的に照合します。
/[0-9A-F]+/ 16 進文字列と一致します
[^0-9]先頭の^文字セットを否定し、指定された文字セット以外のものと一致します。

正規表現リテラル構造の末尾にあるi (例/yes/i ) は、照合で大文字と小文字が区別されないことを示します。現時点では、他の正規表現修飾子はサポートされていません。

Firebase Realtime Database セキュリティ ルールの正規表現マッチングでは、一致の検出のみが可能であり、文字列の一部のキャプチャはできないため、貪欲でも非貪欲でもありません。

使用法

文字列は 1900 ~ 2099 の YYYY-MM-DD 形式の日付である必要があります。

".validate": "newData.isString() && newData.val().matches(/^(19|20)[0-9][0-9][-\\/. ](0[1-9]|1[012])[-\\/. ](0[1-9]|[12][0-9]|3[01])$/)"

文字列は電子メール アドレスである必要があります。

".validate": "newData.isString() && newData.val().matches(/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$/i)"

文字列が基本 URL である必要があります。

".validate": "newData.isString() && newData.val().matches(/^(ht|f)tp(s?):\\/\\/[0-9a-zA-Z]([-.\\w]*[0-9a-zA-Z])*((0-9)*)*(\\/?)([a-zA-Z0-9\\-\\.\\?\\,\\'\\/\\\\+&=%\\$#_]*)?$/)"