【Firestore】firestore.rulesの正規表現のエスケープで詰まった話

firestore.rulesのmatchesは正規表現が書ける。

例えば、下記のように書けばnameが「ダボハゼ」か「半魚人」にマッチした場合のみuserコレクションに書き込まれる。

    match user {
      allow create: if request.resource.data.name.matches('ダボハゼ|半魚人');
    }

「|」はメタ文字なので、もしnameが「ダボハゼ」か「半魚人」ではなく、「ダボハゼ|半魚人」に一致した場合のみ書き込みOKとしたい場合、エスケープする必要がある。

JavaScriptなどだと下記でできるけど、firestore.rulesだとdeployしたときになぜかエラーになった。

    match user {
      allow create: if request.resource.data.name.matches('ダボハゼ¥|半魚人');
    }

調べたところ、どうやらメタ文字をエスケープする場合は「¥」を2つ記述必要があるっぽい。

    match user {
      allow create: if request.resource.data.name.matches('ダボハゼ¥¥|半魚人');
    }

「.」の場合は「¥¥.」のようになる。

メールアドレスの正規表現を書くときとかお気をつけください。

↓↓「にほんブログ村」のランキングに参加しています。少しでも面白い、参考になったとか思われたらポチッとしていただけると嬉しいです!
にほんブログ村 IT技術ブログへ
にほんブログ村