Os literais de expressão regular podem ser usados para validar strings fornecidas pelo cliente. Use string.matches(/pattern/) para testar se uma string segue um padrão de expressão regular. A sintaxe de expressão regular não é idêntica à sintaxe comum de expressões regulares, em particular:
*+.()[]{}\funcionam normalmente.- As âncoras
^e$só funcionam se as usarmos para corresponder ao primeiro ou último caractere no padrão. - somente a flag de modificador
i(ignorar caso) é compatível
Literais
Um literal de expressão regular é introduzido em uma expressão de segurança usando a notação /pattern/. Para testar se uma string segue um padrão de expressão regular, use a função de membro de correspondências da string. A regra de correspondências a seguir verifica se os novos dados começam com a string foo.
".validate": "newData.val().matches(/^foo/)"
Recursos compatíveis
O Firebase oferece suporte apenas a um subconjunto de recursos típicos de expressão regular. No entanto, a sintaxe de expressão regular deve ser familiar.
Estes são os símbolos compatíveis:
| Personagem | Significado |
|---|---|
\s \w \d \S \W \D |
conjuntos de caracteres predefinidos para correspondência de espaço em branco, um caractere de palavra ou um dígito e suas negações (respectivamente) |
\ |
escape, o caractere a seguir é interpretado literalmente. Se você quiser corresponder a "", também faça o escape dele /\/
|
^ |
âncora para o início da string. Isso só pode ser usado como a primeira letra do padrão.
/a/ corresponde a "ba", enquanto /^a/ não.
|
$ |
âncora para o final da string. Isso só pode ser usado como a última letra do padrão. /a/
corresponde a "ab", enquanto /a$/ não.
|
* |
corresponde a zero ou muitas ocorrências do padrão anterior. /^a*$/ corresponde a "" e "aaa", mas não a "b"
|
+ |
corresponde a uma ou mais ocorrências do padrão anterior. /^a+$/ corresponde a "a" e "aaa", mas não a ""
|
? |
corresponde a zero ou uma ocorrência do padrão anterior. /^a?$/ corresponde a "" e "a", mas não a "aa"
|
. |
corresponde a qualquer caractere /......../ corresponde a "Firebase"
|
(pattern) |
parênteses agrupa um padrão em uma única unidade /(ab)*/ corresponde a "abab"
|
a|b |
corresponde a a ou b /a|bc/ corresponde a "ac" ou "bc"
|
[akz] |
um conjunto de caracteres, corresponde a qualquer um dos caracteres incluídos. /[ABCDEF]/ corresponde apenas a letras maiúsculas
de A a F.
|
[a-z] |
um intervalo de caracteres, corresponde a todos os caracteres inclusivos no intervalo especificado. /[0-9A-F]+/
corresponde a strings hexadecimais
|
[^0-9] |
Um ^ inicial nega o conjunto de caracteres, correspondendo a qualquer coisa diferente do conjunto de caracteres especificado.
|
Um i após a construção literal de expressão regular (por exemplo, /yes/i) indica que a correspondência não vai diferenciar maiúsculas de minúsculas. Outros modificadores de expressão regular não são compatíveis no momento.
A correspondência de expressão regular nas regras de segurança do Firebase Realtime Database não é gananciosa nem não gananciosa, porque ela só permite detectar uma correspondência e não capturar partes da string.
Uso
Exigir que uma string seja uma data formatada como AAAA-MM-DD entre 1900 e 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])$/)"
Exigir que a string seja um endereço de e-mail:
".validate": "newData.isString() && newData.val().matches(/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$/i)"
Exigir que a string seja um URL básico:
".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\\-\\.\\?\\,\\'\\/\\\\+&=%\\$#_]*)?$/)"