Espressioni regolari delle regole di sicurezza Firebase

È possibile utilizzare valori letterali di espressioni regolari per convalidare le stringhe fornite dal client. Utilizzare string.matches(/pattern/) per verificare se una stringa aderisce a un modello di espressione regolare. La sintassi delle espressioni regolari non è identica alla sintassi comune delle espressioni regolari, in particolare:

  • * + . ( ) [ ] { } \ funziona normalmente.
  • Le ancore ^ e $ funzionano solo se le utilizziamo per abbinare il primo o l'ultimo carattere del modello.
  • è supportato solo il flag di modifica i (ignora maiuscole/minuscole).

Letterali

Un valore letterale di espressione regolare viene introdotto in un'espressione di sicurezza utilizzando la notazione /pattern/ . Per verificare se una stringa aderisce a un modello di espressione regolare, utilizzare la funzione membromatch di stringa. La seguente regola di corrispondenza controlla se i nuovi dati iniziano con la stringa foo.

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

Funzionalità supportate

Firebase supporta solo un sottoinsieme delle funzionalità tipiche delle espressioni regolari. Tuttavia, la sintassi delle espressioni regolari dovrebbe risultare familiare.

Questi sono i simboli supportati:

Carattere Senso
\s \w \d \S \W \D set di caratteri predefiniti per la corrispondenza di spazi bianchi, caratteri di parole o cifre e le relative negazioni (rispettivamente)
\ escape, il carattere che segue viene interpretato letteralmente.
Se vuoi trovare la corrispondenza su "" stesso, esegui l'escape anche /\/
^ ancorare all'inizio della stringa. Può essere utilizzata solo come prima lettera del pattern.
/a/ corrisponde a "ba", mentre /^a/ no.
$ ancoraggio all'estremità della corda. Può essere utilizzata solo come ultima lettera del pattern.
/a/ corrisponde a "ab", mentre /a$/ no.
* corrisponde a zero o a molti dei criteri precedenti.
/^a*$/ corrisponde a "" e "aaa", ma non a "b"
+ corrisponde a uno o più dei modelli precedenti.
/^a+$/ corrisponde a "a" e "aaa", ma non a ""
? corrisponde a zero o a uno del modello precedente.
/^a?$/ corrisponde a "" e "a", ma non a "aa"
. corrisponde a qualsiasi carattere
/......../ corrisponde a "Firebase"
(pattern) parentesi raggruppa un modello in una singola unità
/(ab)*/ corrisponde a "abab"
a|b corrisponde ad a o b
/a|bc/ corrisponde a "ac" o "bc"
[akz] un set di caratteri, corrisponde a uno qualsiasi dei caratteri inclusi.
/[ABCDEF]/ corrisponde solo alle lettere maiuscole dalla A alla F.
[az] un intervallo di caratteri, corrisponde a tutti i caratteri inclusi nell'intervallo specificato.
/[0-9A-F]+/ corrisponde a stringhe esadecimali
[^0-9] Un ^ iniziale nega il set di caratteri, corrispondendo a qualsiasi cosa diversa dal set di caratteri specificato.

Una i che segue la costruzione letterale dell'espressione regolare (ad esempio /yes/i ) indica che la corrispondenza non farà distinzione tra maiuscole e minuscole. Altri modificatori di espressioni regolari non sono supportati al momento.

La corrispondenza delle espressioni regolari nelle regole di sicurezza del database Firebase Realtime non è né greedy né non-greedy, poiché consente solo di rilevare una corrispondenza e non di acquisire parti della stringa.

Utilizzo

Richiedi che una stringa sia una data formattata come AAAA-MM-GG tra 1900-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])$/)"

Richiedi che la stringa sia un indirizzo email:

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

Richiedi che la stringa sia un URL di 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\\-\\.\\?\\,\\'\\/\\\\+&=%\\$#_]*)?$/)"