Reguläre Ausdrücke in Sicherheitsregeln für Realtime Database verwenden

Mit regulären Ausdrucksliteralen können vom Client bereitgestellte Strings validiert werden. Verwenden Sie string.matches(/pattern/), um zu testen, ob ein String einem Muster für reguläre Ausdrücke entspricht. Die Syntax für reguläre Ausdrücke ist nicht mit der allgemeinen Syntax für reguläre Ausdrücke identisch. Insbesondere gilt Folgendes:

  • * + . ( ) [ ] { } \ funktionieren wie gewohnt.
  • Die Anker ^ und $ funktionieren nur, wenn sie verwendet werden, um das erste oder letzte Zeichen im Muster abzugleichen.
  • Es wird nur das Modifikator-Flag i (Groß-/Kleinschreibung ignorieren) unterstützt.

Literale

Ein reguläres Ausdrucksliteral wird mit der Notation /pattern/ in einen Sicherheitsausdruck eingeführt. Verwenden Sie die Member-Funktion „matches“ des Strings, um zu testen, ob ein String einem Muster für reguläre Ausdrücke entspricht. Mit der folgenden Regel für Übereinstimmungen wird geprüft, ob die neuen Daten mit dem String „foo“ beginnen.

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

Unterstützte Features

Firebase unterstützt nur eine Teilmenge der typischen Features für reguläre Ausdrücke. Die Syntax für reguläre Ausdrücke sollte Ihnen jedoch bekannt vorkommen.

Folgende Symbole werden unterstützt:

Zeichen Bedeutung
\s \w \d \S \W \D Vordefinierte Zeichensätze für den Abgleich von Leerzeichen, einem Wortzeichen oder einer Ziffer und deren Negationen (bzw.)
\ Escapezeichen. Das folgende Zeichen wird wörtlich interpretiert.
Wenn Sie "" abgleichen möchten, müssen Sie es auch mit einem Escapezeichen versehen: /\/
^ Anker am Anfang des Strings. Kann nur als erster Buchstabe des Musters verwendet werden.
/a/ stimmt mit „ba“ überein, /^a/ jedoch nicht.
$ Anker am Ende des Strings. Kann nur als letzter Buchstabe des Musters verwendet werden.
/a/ stimmt mit „ab“ überein, /a$/ jedoch nicht.
* Stimmt mit null oder vielen Instanzen des vorherigen Musters überein.
/^a*$/ stimmt mit "" und „aaa“ überein, aber nicht mit „b“.
+ Stimmt mit einer oder mehreren Instanzen des vorherigen Musters überein.
/^a+$/ stimmt mit „a“ und „aaa“ überein, aber nicht mit "".
? Stimmt mit null oder einer Instanz des vorherigen Musters überein.
/^a?$/ stimmt mit "" und „a“ überein, aber nicht mit „aa“.
. Stimmt mit einem beliebigen Zeichen überein.
/......../ stimmt mit „Firebase“ überein.
(pattern) Mit Klammern wird ein Muster zu einer einzelnen Einheit gruppiert.
/(ab)*/ stimmt mit „abab“ überein.
a|b Stimmt entweder mit „a“ oder „b“ überein.
/a|bc/ stimmt mit „ac“ oder „bc“ überein.
[akz] Ein Zeichensatz, der mit einem der enthaltenen Zeichen übereinstimmt.
/[ABCDEF]/ stimmt nur mit Großbuchstaben von A bis F überein.
[a-z] Ein Zeichenintervall, das mit allen Zeichen im angegebenen Bereich übereinstimmt.
/[0-9A-F]+/ stimmt mit hexadezimalen Strings überein.
[^0-9] Ein führendes ^ negiert den Zeichensatz und stimmt mit allem überein, was nicht dem angegebenen Zeichensatz entspricht.

Ein i nach der Konstruktion des regulären Ausdrucksliterals (z.B. /yes/i) gibt an, dass beim Abgleich die Groß-/Kleinschreibung nicht berücksichtigt wird. Andere Modifikatoren für reguläre Ausdrücke werden derzeit nicht unterstützt.

Beim Abgleich regulärer Ausdrücke in den Sicherheitsregeln der Firebase Realtime Database wird weder der Greedy- noch der Non-Greedy-Modus verwendet, da Sie nur eine Übereinstimmung erkennen und keine Teile des Strings erfassen können.

Nutzung

Erfordert, dass ein String ein Datum im Format JJJJ-MM-TT zwischen 1900 und 2099 ist:

".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])$/)"

Erfordert, dass ein String eine E-Mail-Adresse ist:

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

Erfordert, dass ein String eine einfache URL ist:

".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\\-\\.\\?\\,\\'\\/\\\\+&=%\\$#_]*)?$/)"