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 respecte 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 :
*+.()[]{}\fonctionnent 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 modificateur
i(ignorer la casse) est accepté.
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 respecte un modèle d'expression régulière, utilisez la fonction membre matches de la chaîne. 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 disponibles
Firebase n'accepte qu'un sous-ensemble des fonctionnalités d'expression régulière classiques. Toutefois, la syntaxe des expressions régulières devrait vous être familière.
Voici les symboles acceptés :
| Personnage | Signification |
|---|---|
\s \w \d \S \W \D |
Ensembles de caractères prédéfinis pour la correspondance avec un espace, un caractère de mot ou un chiffre, et leurs négations (respectivement) |
\ |
Échappement : le caractère suivant est interprété littéralement. Si vous souhaitez faire correspondre "" lui-même, échappez-le également /\/
|
^ |
Ancre au début de la chaîne. Ne peut être utilisé que comme première lettre du modèle.
/a/ correspond à "ba", mais pas /^a/.
|
$ |
Ancre à la fin de la chaîne. Ne peut être utilisé que comme dernière lettre du modèle. /a/
correspond à "ab", mais pas /a$/.
|
* |
Correspond à zéro ou à plusieurs occurrences du modèle précédent. /^a*$/ correspond à "" et "aaa", mais pas à "b".
|
+ |
Correspond à une ou plusieurs occurrences du modèle précédent. /^a+$/ correspond à "a" et "aaa", mais pas à "".
|
? |
Correspond à zéro ou à une occurrence du modèle précédent. /^a?$/ correspond à "" et "a", mais pas à "aa".
|
. |
Correspond à n'importe quel caractère. /......../ correspond à "Firebase".
|
(pattern) |
Les parenthèses regroupent un modèle en une seule unité /(ab)*/ correspond à "abab".
|
a|b |
Correspond à a ou à b /a|bc/ correspond à "ac" ou "bc"
|
[akz] |
Un ensemble de caractères correspond à n'importe quel caractère inclus. /[ABCDEF]/ ne correspond qu'aux lettres majuscules
de A à F.
|
[a-z] |
Un intervalle de caractères correspond à tous les caractères inclus dans la plage spécifiée. /[0-9A-F]+/
correspond aux chaînes hexadécimales.
|
[^0-9] |
Un ^ de début nie l'ensemble de caractères, en faisant correspondre tout ce qui n'est pas l'ensemble de caractères spécifié.
|
Un i à la suite 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'expression régulière ne sont pas acceptés pour le moment.
La correspondance d'expressions régulières dans les règles de sécurité de Firebase Realtime Database n'est ni gourmande ni non gourmande, car elle ne vous permet que de détecter une correspondance et non de capturer des parties de la chaîne.
Utilisation
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 qu'une 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 qu'une 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\\-\\.\\?\\,\\'\\/\\\\+&=%\\$#_]*)?$/)"