Используйте регулярные выражения в правилах безопасности баз данных в реальном времени.

Литералы регулярных выражений можно использовать для проверки строк, предоставленных клиентом. Используйте string.matches(/pattern/) , чтобы проверить, соответствует ли строка шаблону регулярного выражения. Синтаксис регулярных выражений не идентичен синтаксису обычных регулярных выражений, в частности:

  • * + . ( ) [ ] { } \ работает как обычно.
  • Символы ^ и $ работают только в том случае, если мы используем их для сопоставления первого или последнего символа в шаблоне.
  • Поддерживается только флаг модификатора i (игнорировать регистр).

Буквалы

В выражение безопасности вводится литерал регулярного выражения с использованием обозначения /pattern/ . Чтобы проверить, соответствует ли строка шаблону регулярного выражения, используйте функцию-член matches объекта string. Следующее правило matches проверяет, начинаются ли новые данные со строки foo.

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

Поддерживаемые функции

Firebase поддерживает лишь часть типичных функций регулярных выражений. Однако синтаксис регулярных выражений должен быть вам знаком.

Поддерживаются следующие символы:

Характер Значение
\s \w \d \S \W \D Предопределенные наборы символов для сопоставления пробелов, символов слова или цифр, а также их отрицания (соответственно).
\ При выходе из системы следующий за ним символ интерпретируется буквально.
Если вы хотите выполнить поиск по самому символу "", экранируйте его тоже /\/
^ Привязать к началу строки. Это можно использовать только в качестве первой буквы шаблона.
/a/ соответствует "ba", тогда как /^a/ нет.
$ Прикрепите якорь к концу нити. Его можно использовать только в качестве последней буквы узора.
/a/ соответствует "ab", тогда как /a$/ нет.
* соответствует нулю или многим из предыдущего шаблона.
/^a*$/ соответствует "" и "aaa", но не "b"
+ соответствует одному или нескольким из указанных выше шаблонов.
/^a+$/ соответствует "a" и "aaa", но не ""
? соответствует нулю или одному из предыдущих шаблонов.
/^a?$/ соответствует "" и "a", но не "aa"
. подходит любому персонажу
/......../ соответствует "Firebase"
(pattern) Скобки объединяют элементы узора в единое целое.
/(ab)*/ соответствует "abab"
a|b соответствует либо a, либо b
/a|bc/ соответствует "ac" или "bc"
[akz] Набор символов соответствует любому из включенных символов.
/[ABCDEF]/ соответствует только заглавным буквам от A до F.
[az] Интервал символов, включающий все символы в указанном диапазоне.
/[0-9A-F]+/ соответствует шестнадцатеричным строкам
[^0-9] Символ ^ в начале строки инвертирует набор символов, указывая на любой набор символов, кроме указанного.

Символ i завершающий конструкцию литерала регулярного выражения (например /yes/i ), указывает на то, что сопоставление будет нечувствительным к регистру. Другие модификаторы регулярных выражений в настоящее время не поддерживаются.

В правилах безопасности базы данных Firebase Realtime Database сопоставление с помощью регулярных выражений не является ни жадным, ни нежадным, поскольку оно позволяет только обнаружить совпадение, а не захватывать части строки.

Использование

Требуется, чтобы строка представляла собой дату в формате ГГГГ-ММ-ДД в диапазоне от 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])$/)"

Для корректного отображения строки необходимо указать адрес электронной почты:

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

Для корректной работы строки необходимо указать простой URL-адрес:

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