Литералы регулярных выражений можно использовать для проверки строк, предоставленных клиентом. Используйте 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\\-\\.\\?\\,\\'\\/\\\\+&=%\\$#_]*)?$/)"