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