Mit regulären Ausdrucksliteralen können vom Client bereitgestellte Strings validiert werden. Verwenden Sie string.matches(/pattern/), um zu testen, ob ein String einem regulären Ausdrucksmuster 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 regulären Ausdrucksmuster entspricht. Mit der folgenden Regel 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 "" selbst abgleichen möchten, müssen Sie es auch mit einem Escapezeichen versehen: /\/
|
^ |
Anker für den Anfang des Strings. Kann nur als erster Buchstabe des Musters verwendet werden.
/a/ stimmt mit „ba“ überein, /^a/ jedoch nicht.
|
$ |
Anker für das 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) |
Klammern gruppieren ein Muster zu einer einzelnen Einheit. /(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 regulären Ausdrucksliteralkonstruktion (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\\-\\.\\?\\,\\'\\/\\\\+&=%\\$#_]*)?$/)"