Używanie wyrażeń regularnych w regułach zabezpieczeń Bazy danych czasu rzeczywistego

Literałów wyrażeń regularnych można używać do weryfikowania ciągów znaków dostarczonych przez klienta. Aby sprawdzić, czy ciąg znaków jest zgodny ze wzorcem wyrażenia regularnego, użyj funkcji string.matches(/pattern/). Składnia wyrażeń regularnych nie jest identyczna ze zwykłą składnią wyrażeń regularnych, w szczególności:

  • *, +, ., (, ), [, ], {, }, \ działają normalnie.
  • Kotwice ^ i $ działają tylko wtedy, gdy używamy ich do dopasowania pierwszego lub ostatniego znaku we wzorcu.
  • obsługiwana jest tylko flaga modyfikatora i (ignorowanie wielkości liter)

Literały

Literał wyrażenia regularnego jest wprowadzany do wyrażenia zabezpieczającego za pomocą notacji /pattern/. Aby sprawdzić, czy ciąg znaków jest zgodny ze wzorcem wyrażenia regularnego, użyj funkcji matches elementu string. Poniższa reguła matches sprawdza, czy nowe dane zaczynają się od ciągu znaków foo.

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

Obsługiwane funkcje

Firebase obsługuje tylko podzbiór typowych funkcji wyrażeń regularnych. Składnia wyrażeń regularnych powinna jednak być znana.

Oto obsługiwane symbole:

Postać Znaczenie
\s \w \d \S \W \D wstępnie zdefiniowane zestawy znaków do dopasowywania białych znaków, znaków słowa lub cyfr oraz ich negacji (odpowiednio)
\ znak modyfikacji, znak następujący jest interpretowany dosłownie.
Jeśli chcesz dopasować sam znak „”, musisz go też zmodyfikować: /\/
^ kotwica na początku ciągu znaków. Można jej używać tylko jako pierwszej litery wzorca.
/a/ pasuje do „ba”, ale /^a/ już nie.
$ kotwica na końcu ciągu znaków. Można jej używać tylko jako ostatniej litery wzorca.
/a/ pasuje do „ab”, ale /a$/ już nie.
* dopasowuje zero lub wiele wystąpień poprzedniego wzorca.
/^a*$/ pasuje do „” i „aaa”, ale nie do „b”.
+ dopasowuje co najmniej 1 wystąpienie poprzedniego wzorca.
/^a+$/ pasuje do „a” i „aaa”, ale nie do „”.
? dopasowuje zero lub 1 wystąpienie poprzedniego wzorca.
/^a?$/ pasuje do „” i „a”, ale nie do „aa”.
. dopasowuje dowolny znak.
/......../ pasuje do „Firebase”.
(pattern) nawiasy grupują wzorzec w jedną jednostkę
/(ab)*/ pasuje do "abab"
a|b dopasowuje a lub b
/a|bc/ pasuje do „ac” lub „bc”.
[akz] zestaw znaków, dopasowuje dowolny z uwzględnionych znaków.
/[ABCDEF]/ pasuje tylko do wielkich liter od A do F.
[a-z] przedział znaków, dopasowuje wszystkie znaki w określonym zakresie.
/[0-9A-F]+/ pasuje do ciągów szesnastkowych.
[^0-9] Początkowy znak ^ neguje zestaw znaków, dopasowując wszystko inne niż określony zestaw znaków.

Znak i na końcu konstrukcji literału wyrażenia regularnego (np. /yes/i) oznacza, że dopasowanie będzie uwzględniać wielkość liter. Inne modyfikatory wyrażeń regularnych nie są obecnie obsługiwane.

Dopasowywanie wyrażeń regularnych w regułach zabezpieczeń Bazy danych czasu rzeczywistego Firebase nie jest ani zachłanne, ani niezachłanne, ponieważ pozwala tylko wykryć dopasowanie, a nie przechwytywać części ciągu znaków.

Wykorzystanie

Wymagaj, aby ciąg znaków był datą w formacie RRRR-MM-DD w latach 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])$/)"

Wymagaj, aby ciąg znaków był adresem e-mail:

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

Wymagaj, aby ciąg znaków był podstawowym adresem 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\\-\\.\\?\\,\\'\\/\\\\+&=%\\$#_]*)?$/)"