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 dostarczonych przez klienta. Aby sprawdzić, czy ciąg jest zgodny ze wzorcem wyrażenia regularnego, użyj funkcji string.matches(/pattern/). Składnia wyrażeń regularnych nie jest identyczna ze składnią typowych 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 jest zgodny ze wzorcem wyrażenia regularnego, użyj funkcji składowej matches ciągu. Poniższa reguła matches 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. 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łów lub cyfr oraz ich negacji (odpowiednio)
\ znak modyfikacji, znak następujący jest interpretowany dosłownie.
Jeśli chcesz dopasować sam znak „”, użyj znaku modyfikacji /\/
^ kotwica na początku ciągu. Można jej używać tylko jako pierwszej litery wzorca.
/a/ pasuje do „ba”, ale /^a/ nie.
$ kotwica na końcu ciągu. Można jej używać tylko jako ostatniej litery wzorca.
/a/ pasuje do „ab”, ale /a$/ 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ż umożliwia tylko wykrywanie dopasowania, a nie przechwytywanie części ciągu.

Wykorzystanie

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