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