Reglas de seguridad de Firebase Expresiones regulares

Los literales de expresiones regulares se pueden usar para validar las cadenas proporcionadas por el cliente. Use string.matches(/pattern/) para probar si una cadena se adhiere a un patrón de expresión regular. La sintaxis de expresiones regulares no es idéntica a la sintaxis de expresiones regulares comunes, en particular:

  • * + . ( ) [ ] { } \ funciona normalmente.
  • Los anclajes ^ y $ solo funcionan si los usamos para hacer coincidir el primer o el último carácter del patrón.
  • solo se admite el indicador modificador i (ignorar mayúsculas y minúsculas)

literales

Un literal de expresión regular se introduce en una expresión de seguridad mediante la notación /pattern/ . Para probar si una cadena se adhiere a un patrón de expresión regular, use la función miembro de coincidencias de la cadena. La siguiente regla de coincidencias verifica si los nuevos datos comienzan con la cadena foo.

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

Funciones admitidas

Firebase admite solo un subconjunto de características típicas de expresiones regulares. Sin embargo, la sintaxis de expresiones regulares debería resultarle familiar.

Estos son los símbolos admitidos:

Personaje Significado
\s \w \d \S \W \D conjuntos de caracteres predefinidos para hacer coincidir espacios en blanco, un carácter de palabra o un dígito, y sus negaciones (respectivamente)
\ escape, el carácter siguiente se interpreta literalmente.
Si desea hacer coincidir "" en sí mismo, escápelo también /\/
^ ancla al comienzo de la cadena. Esto solo se puede usar como la primera letra del patrón.
/a/ coincide con "ba", mientras que /^a/ no.
$ ancla al final de la cuerda. Esto solo se puede usar como la última letra del patrón.
/a/ coincide con "ab", mientras que /a$/ no.
* coincide con cero o muchos del patrón anterior.
/^a*$/ coincide con "" y "aaa", pero no con "b"
+ coincide con uno o más del patrón anterior.
/^a+$/ coincide con "a" y "aaa", pero no con ""
? coincide con cero o uno del patrón anterior.
/^a?$/ coincide con "" y "a", pero no con "aa"
. coincide con cualquier carácter
/......../ coincide con "Firebase"
(pattern) el paréntesis agrupa un patrón en una sola unidad
/(ab)*/ coincide con "abab"
a|b coincide con a o b
/a|bc/ coincide con "ac" o "bc"
[akz] un conjunto de caracteres, coincide con cualquiera de los caracteres incluidos.
/[ABCDEF]/ coincide solo con letras mayúsculas de la A a la F.
[az] un intervalo de caracteres, coincide con todos los caracteres incluidos en el rango especificado.
/[0-9A-F]+/ coincide con cadenas hexadecimales
[^0-9] Un ^ inicial niega el juego de caracteres, coincidiendo con cualquier cosa que no sea el juego de caracteres especificado.

Una i detrás de la construcción literal de la expresión regular (por ejemplo /yes/i ) indica que la coincidencia no distinguirá entre mayúsculas y minúsculas. En este momento, no se admiten otros modificadores de expresiones regulares.

La coincidencia de expresiones regulares en las reglas de seguridad de la base de datos en tiempo real de Firebase no es codiciosa ni no codiciosa, ya que solo le permite detectar una coincidencia y no capturar partes de la cadena.

Uso

Requerir que una cadena sea una fecha con el formato AAAA-MM-DD entre 1900 y 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])$/)"

Requerir que la cadena sea una dirección de correo electrónico:

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

Requerir que la cadena sea una URL básica:

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