Reguły zabezpieczeń Firebase Wyrażenia regularne

Do sprawdzania poprawności ciągów dostarczonych przez klienta można używać literałów wyrażeń regularnych. Użyj string.matches(/pattern/) , aby sprawdzić, czy ciąg znaków jest zgodny ze wzorcem wyrażenia regularnego. Składnia wyrażeń regularnych nie jest identyczna ze składnią typowych wyrażeń regularnych, w szczególności:

  • * + . ( ) [ ] { } \ pracuj 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 (ignoruj ​​wielkość liter).

Literały

Literał wyrażenia regularnego jest wprowadzany do wyrażenia zabezpieczającego przy użyciu /pattern/ . Aby sprawdzić, czy ciąg znaków jest zgodny ze wzorcem wyrażenia regularnego, użyj funkcji członkowskiej pasuje do string. Następująca reguła dopasowań sprawdza, czy nowe dane zaczynają się od ciągu foo.

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

Obsługiwane funkcje

Firebase obsługuje tylko podzbiór typowych funkcji wyrażeń regularnych. Jednak składnia wyrażeń regularnych powinna wydawać się znajoma.

Oto obsługiwane symbole:

Postać Oznaczający
\s \w \d \S \W \D predefiniowane zestawy znaków do dopasowywania białych znaków, znaku słownego lub cyfry i ich negacji (odpowiednio)
\ ucieczki, następujący po nim znak jest interpretowany dosłownie.
Jeśli chcesz dopasować samo „”, również od niego uciekaj /\/
^ zakotwiczenie na początku ciągu. Można tego użyć tylko jako pierwszej litery wzoru.
/a/ pasuje do „ba”, podczas gdy /^a/ nie.
$ kotwica na końcu łańcucha. Można tego użyć tylko jako ostatniej litery wzoru.
/a/ pasuje do „ab”, podczas gdy /a$/ nie.
* pasuje do zera lub wielu z poprzedniego wzorca.
/^a*$/ dopasowuje „” i „aaa”, ale nie „b”
+ pasuje do jednego lub większej liczby poprzednich wzorców.
/^a+$/ dopasowuje „a” i „aaa”, ale nie „”
? pasuje do zera lub jednego z poprzednich wzorców.
/^a?$/ dopasowuje „” i „a”, ale nie „aa”
. pasuje do dowolnego znaku
/......../ pasuje do „Firebase”
(pattern) nawiasy grupują wzór w jedną jednostkę
/(ab)*/ pasuje do „abab”
a|b pasuje do a lub b
/a|bc/ dopasowuje „ac” lub „bc”
[akz] zestaw znaków, pasuje do dowolnego z zawartych znaków.
/[ABCDEF]/ dopasowuje tylko wielkie litery od A do F.
[az] interwał znaków, dopasowuje wszystkie znaki włącznie z określonym zakresem.
/[0-9A-F]+/ dopasowuje ciągi szesnastkowe
[^0-9] Wiodący ^ neguje zestaw znaków, dopasowując wszystko inne niż określony zestaw znaków.

i na końcu dosłownej konstrukcji wyrażenia regularnego (np. /yes/i ) wskazuje, że w dopasowaniu nie będzie uwzględniana wielkość liter. Inne modyfikatory wyrażeń regularnych nie są obecnie obsługiwane.

Dopasowywanie wyrażeń regularnych w regułach bezpieczeństwa bazy danych Firebase Realtime nie jest ani zachłanne, ani niezachłanne, ponieważ pozwala jedynie wykryć dopasowanie, a nie przechwytywać części ciągu.

Stosowanie

Wymagaj, aby ciąg znaków był datą sformatowaną jako RRRR-MM-DD w przedziale 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\\-\\.\\?\\,\\'\\/\\\\+&=%\\$#_]*)?$/)"