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