Литералы регулярных выражений можно использовать для проверки строк, предоставленных клиентом. Используйте string.matches(/pattern/)
чтобы проверить, соответствует ли строка шаблону регулярного выражения. Синтаксис регулярных выражений не идентичен синтаксису обычных регулярных выражений, в частности:
-
*
+
.
(
)
[
]
{
}
\
работают в обычном режиме. - Якоря
^
и$
работают только в том случае, если мы используем их для сопоставления первого или последнего символа в шаблоне. - поддерживается только флаг модификатора
i
(игнорировать регистр)
Литералы
Литерал регулярного выражения вводится в выражение безопасности с помощью нотации /pattern/
. Чтобы проверить, соответствует ли строка шаблону регулярного выражения, используйте функцию-член match строки. Следующее правило сопоставления проверяет, начинаются ли новые данные со строки foo.
".validate": "newData.val().matches(/^foo/)"
Поддерживаемые функции
Firebase поддерживает только часть типичных функций регулярных выражений. Однако синтаксис регулярных выражений должен показаться вам знакомым.
Поддерживаемые символы:
Характер | Значение |
---|---|
\s \w \d \S \W \D | предопределенные наборы символов для сопоставления пробелов, словесных символов или цифр и их отрицаний (соответственно) |
\ | escape, следующий символ интерпретируется буквально. Если вы хотите найти совпадение с самим "", избегайте и его /\/ |
^ | привязка к началу строки. Ее можно использовать только как первую букву шаблона./a/ соответствует «ba», а /^a/ — нет. |
$ | привязка к концу строки. Ее можно использовать только как последнюю букву шаблона./a/ соответствует «ab», а /a$/ — нет. |
* | соответствует нулю или многим из предыдущего шаблона./^a*$/ соответствует "" и "aaa", но не соответствует "b" |
+ | соответствует одному или нескольким предыдущим шаблонам./^a+$/ соответствует "a" и "aaa", но не соответствует "" |
? | соответствует нулю или одному из предыдущих шаблонов./^a?$/ соответствует "" и "a", но не соответствует "aa" |
. | соответствует любому персонажу/......../ соответствует "Firebase" |
(pattern) | скобки группируют шаблон в единое целое/(ab)*/ соответствует «абабу» |
a|b | соответствует либо a, либо b/a|bc/ соответствует «ac» или «bc» |
[akz] | набор символов, соответствует любому из включенных символов./[ABCDEF]/ соответствует только заглавным буквам от A до F. |
[az] | интервал символов, соответствует всем символам включительно в указанном диапазоне./[0-9A-F]+/ соответствует шестнадцатеричным строкам |
[^0-9] | Ведущий ^ отменяет набор символов, сопоставляя все, что отличается от указанного набора символов. |
i
завершающий литеральную конструкцию регулярного выражения (например /yes/i
), указывает на то, что сопоставление будет нечувствительно к регистру. Другие модификаторы регулярных выражений в настоящее время не поддерживаются.
Сопоставление регулярных выражений в Firebase Realtime Database Security Rules не является ни жадным, ни нежадным, поскольку оно позволяет вам только обнаруживать совпадения, а не захватывать части строки.
Использование
Требовать, чтобы строка представляла собой дату в формате ГГГГ-ММ-ДД в диапазоне 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\\-\\.\\?\\,\\'\\/\\\\+&=%\\$#_]*)?$/)"