Los literales de expresiones regulares se pueden usar para validar cadenas proporcionadas por el cliente. Usa string.matches(/pattern/) para probar si una cadena se ajusta 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:
*+.()[]{}\funcionan con normalidad.- Los anclajes
^y$solo funcionan si los usamos para que coincidan con el primer o el último carácter del patrón. - Solo se admite la marca modificadora
i(ignorar mayúsculas y minúsculas).
Literales
Un literal de expresión regular se introduce en una expresión de seguridad con la notación /pattern/. Para probar si una cadena se ajusta a un patrón de expresión regular, usa la función miembro matches de la cadena. La siguiente regla de coincidencia verifica si los datos nuevos comienzan con la cadena foo.
".validate": "newData.val().matches(/^foo/)"
Funciones compatibles
Firebase solo admite un subconjunto de las funciones típicas de expresiones regulares. Sin embargo, la sintaxis de expresiones regulares debería resultarte familiar.
Estos son los símbolos admitidos:
| Carácter | Significado |
|---|---|
\s \w \d \S \W \D |
conjuntos de caracteres predefinidos para que coincidan con 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 quieres que coincida con "" en sí, también debes escaparlo /\/
|
^ |
ancla al comienzo de la cadena. Solo se puede usar como la primera letra del patrón.
/a/ coincide con "ba", mientras que /^a/ no.
|
$ |
ancla al final de la cadena. Solo se puede usar como la última letra del patrón. /a/
coincide con "ab", mientras que /a$/ no.
|
* |
coincide con cero o muchas instancias del patrón anterior. /^a*$/ coincide con "" y "aaa", pero no con "b".
|
+ |
coincide con una o más instancias del patrón anterior. /^a+$/ coincide con "a" y "aaa", pero no con "".
|
? |
coincide con cero o una instancia del patrón anterior. /^a?$/ coincide con "" y "a", pero no con "aa".
|
. |
coincide con cualquier carácter /......../ coincide con "Firebase".
|
(pattern) |
los paréntesis agrupan 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]/ solo coincide con letras mayúsculas
de A a F.
|
[a-z] |
un intervalo de caracteres, coincide con todos los caracteres de forma inclusiva en el rango especificado. /[0-9A-F]+/
coincide con cadenas hexadecimales.
|
[^0-9] |
Un ^ inicial niega el conjunto de caracteres, lo que hace que coincida con cualquier elemento que no sea el conjunto de caracteres especificado.
|
Una i que sigue a la construcción literal de la expresión regular (p.ej., /yes/i) indica que la coincidencia no distinguirá mayúsculas de minúsculas. Por el momento, no se admiten otros modificadores de expresiones regulares.
La coincidencia de expresiones regulares en las reglas de seguridad de Firebase Realtime Database no es greedy ni non-greedy, ya que solo te permite detectar una coincidencia y no capturar partes de la cadena.
Uso
Requiere 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])$/)"
Requiere 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)"
Requiere 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\\-\\.\\?\\,\\'\\/\\\\+&=%\\$#_]*)?$/)"