Wyrażenia regularne reguł zabezpieczeń Firebase

Do sprawdzania ciągów podanych 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żeń regularnych. Składnia wyrażeń regularnych nie jest identyczna ze składnią typowych wyrażeń regularnych, w szczególności:

  • * + . ( ) [ ] { } \ działa jak zwykle.
  • Reklamy zakotwiczone ^ i $ działają tylko wtedy, gdy dopasowujemy pierwszy lub ostatni znak do wzorca.
  • obsługiwana jest tylko flaga modyfikatora i (wielkość liter nie jest rozróżniana)

Literały

Literał wyrażenia regularnego jest wprowadzany do wyrażenia zabezpieczeń za pomocą notacji /pattern/. Aby sprawdzić, czy ciąg znaków jest zgodny ze wzorcem wyrażeń regularnych, użyj funkcji „Dopasuj” ciągu znaków. Poniższe stwierdzenia są zgodne z regułą sprawdza, czy nowe dane zaczynają się od ciągu foo.

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

Obsługiwane funkcje

Firebase obsługuje tylko część typowych funkcji wyrażeń regularnych. Składnia wyrażeń regularnych powinna być jednak znajoma.

Obsługiwane symbole:

Postać Znaczenie
\s \w \d \S \W \D wstępnie zdefiniowane zestawy znaków do dopasowywania odstępów, znaków wyrazowych lub cyfr i ich negacji (odpowiednio)
\ escape, oznacza to, że następujący znak jest interpretowany dosłownie.
Jeśli chcesz dopasować do zapytania „” sobie, też uciekaj /\/
^ na początku ciągu znaków. Użyj jej tylko jako pierwszej litery wzorca.
/a/ pasuje do wyrażenia „ba”, ale /^a/ nie.
$ zakotwiczenie na końcu ciągu. Może być używana tylko jako ostatnia litera wzorca.
, /a/ pasuje do „ab”, podczas gdy /a$/ nie.
* pasuje do 0 lub wielu poprzednich wzorców.
/^a*$/ pasuje do „” i „aaa”, ale nie „b”
+ pasuje do co najmniej jednego poprzedniego wzorca.
/^a+$/ pasuje do „a” i „aaa”, ale nie „”
? pasuje do 0 lub jednego z poprzednich wzorców.
/^a?$/ pasuje do „” i „a”, ale nie „aa”
. pasuje do dowolnego znaku
/......../ pasuje do wyrażenia „Firebase”
(pattern) nawias klamrowy grupuje wzorzec w jedną jednostkę
/(ab)*/ pasuje do „abab”
a|b pasuje do a lub b
/a|bc/ pasuje do "ac" lub „bc”
[akz] zestawu znaków, odpowiada dowolnemu z uwzględnionych znaków.
/[ABCDEF]/ dopasowuje tylko wielkie litery liter od A do F.
[a-z] interwał znaków oznacza dopasowanie wszystkich znaków włącznie z określonego zakresu.
, /[0-9A-F]+/ pasuje do ciągów szesnastkowych
[^0-9] Wiodący element ^ negatywnie neguje zestaw znaków, dopasowując coś innego niż określony zestaw znaków.

Znak i na końcu konstrukcji literału wyrażenia regularnego (np. /yes/i) wskazuje, że w dopasowywaniu nie jest rozróżniana wielkość liter. Inne modyfikatory wyrażeń regularnych nie są obecnie obsługiwane.

Dopasowywanie wyrażeń regularnych w elemencie Firebase Realtime Database Security Rules nie jest ani zachłanne, ani niezachwycające, ponieważ umożliwia tylko wykrycie dopasowania, a nie przechwycenie części ciągu znaków.

Wykorzystanie

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