Expressions régulières des règles de sécurité Firebase

Les littéraux d'expression régulière peuvent être utilisés pour valider les chaînes fournies par le client. Utilisez string.matches(/pattern/) pour tester si une chaîne adhère à un modèle d'expression régulière. La syntaxe des expressions régulières n'est pas identique à la syntaxe des expressions régulières courantes, en particulier :

  • * + . ( ) [ ] { } \ fonctionne normalement.
  • Les ancres ^ et $ ne fonctionnent que si nous les utilisons pour faire correspondre le premier ou le dernier caractère du modèle.
  • seul l'indicateur de modification i (ignorer la casse) est pris en charge

Littéraux

Un littéral d’expression régulière est introduit dans une expression de sécurité à l’aide de la notation /pattern/ . Pour tester si une chaîne adhère à un modèle d’expression régulière, utilisez la fonction membre matches de string. La règle de correspondance suivante vérifie si les nouvelles données commencent par la chaîne foo.

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

Fonctionnalités prises en charge

Firebase ne prend en charge qu'un sous-ensemble de fonctionnalités typiques d'expressions régulières. Cependant, la syntaxe des expressions régulières devrait vous sembler familière.

Voici les symboles pris en charge :

Personnage Signification
\s \w \d \S \W \D jeux de caractères prédéfinis pour faire correspondre les espaces, un caractère de mot ou un chiffre, et leurs négations (respectivement)
\ escape, le caractère qui suit est interprété littéralement.
Si vous souhaitez faire correspondre "" lui-même, échappez-le également /\/
^ ancre au début de la chaîne. Cela ne peut être utilisé que comme première lettre du motif.
/a/ correspond à "ba", alors que /^a/ ne le fait pas.
$ ancrer à la fin de la chaîne. Cela ne peut être utilisé que comme dernière lettre du motif.
/a/ correspond à "ab", alors que /a$/ ne le fait pas.
* correspond à zéro ou plusieurs des modèles précédents.
/^a*$/ correspond à "" et "aaa", mais pas à "b"
+ correspond à un ou plusieurs des modèles précédents.
/^a+$/ correspond à "a" et "aaa", mais pas à ""
? correspond à zéro ou à l’un des modèles précédents.
/^a?$/ correspond à "" et "a", mais pas à "aa"
. correspond à n'importe quel caractère
/......../ correspond à "Firebase"
(pattern) la parenthèse regroupe un motif en une seule unité
/(ab)*/ correspond à "abab"
a|b correspond à a ou b
/a|bc/ correspond à "ac" ou "bc"
[akz] un jeu de caractères, correspond à l'un des caractères inclus.
/[ABCDEF]/ correspond uniquement aux lettres majuscules de A à F.
[az] un intervalle de caractères, correspond à tous les caractères inclusivement dans la plage spécifiée.
/[0-9A-F]+/ correspond aux chaînes hexadécimales
[^0-9] Un ^ en tête annule le jeu de caractères et correspond à tout ce qui n'est pas le jeu de caractères spécifié.

Un i à la fin de la construction littérale de l'expression régulière (par exemple /yes/i ) indique que la correspondance ne sera pas sensible à la casse. Les autres modificateurs d'expressions régulières ne sont pas pris en charge pour le moment.

La correspondance d'expressions régulières dans les règles de sécurité de la base de données en temps réel Firebase n'est ni gourmande ni non gourmande, puisqu'elle vous permet uniquement de détecter une correspondance et non de capturer des parties de la chaîne.

Usage

Exiger qu'une chaîne soit une date au format AAAA-MM-JJ entre 1900 et 2099 :

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

Exiger que la chaîne soit une adresse e-mail :

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

Exiger que la chaîne soit une URL de base :

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