Menggunakan ekspresi reguler dalam Aturan Keamanan Realtime Database

Literal ekspresi reguler dapat digunakan untuk memvalidasi string yang disediakan klien. Gunakan string.matches(/pattern/) untuk menguji apakah string sesuai dengan pola ekspresi reguler. Sintaksis ekspresi reguler tidak identik dengan sintaksis ekspresi reguler umum, khususnya:

  • * + . ( ) [ ] { } \ berfungsi seperti biasa.
  • Anchor ^ dan $ hanya berfungsi jika kita menggunakannya untuk mencocokkan karakter pertama atau terakhir dalam pola.
  • hanya tanda pengubah i (abaikan huruf besar/kecil) yang didukung

Literal

Literal ekspresi reguler diperkenalkan ke dalam ekspresi keamanan menggunakan notasi /pattern/. Untuk menguji apakah string sesuai dengan pola ekspresi reguler, gunakan fungsi anggota kecocokan string. Aturan kecocokan berikut memeriksa apakah data baru dimulai dengan string foo.

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

Fitur yang Didukung

Firebase hanya mendukung sebagian fitur ekspresi reguler umum. Namun, sintaksis ekspresi reguler seharusnya terasa familier.

Berikut adalah simbol yang didukung:

Karakter Arti
\s \w \d \S \W \D set karakter yang telah ditentukan sebelumnya untuk mencocokkan spasi kosong, karakter kata, atau digit, dan negasinya (masing-masing)
\ escape, karakter berikutnya ditafsirkan secara harfiah.
Jika Anda ingin mencocokkan "" itu sendiri, escape juga /\/
^ anchor ke awal string. Ini hanya dapat digunakan sebagai huruf pertama pola.
/a/ cocok dengan "ba", sedangkan /^a/ tidak.
$ penanda ke akhir string. Ini hanya dapat digunakan sebagai huruf terakhir pola.
/a/ cocok dengan "ab", sedangkan /a$/ tidak.
* mencocokkan nol atau banyak pola sebelumnya.
/^a*$/ cocok dengan "" dan "aaa", tetapi tidak cocok dengan "b"
+ cocok dengan satu atau beberapa pola sebelumnya.
/^a+$/ cocok dengan "a" dan "aaa", tetapi tidak cocok dengan ""
? cocok dengan nol atau satu pola sebelumnya.
/^a?$/ cocok dengan "" dan "a", tetapi tidak cocok dengan "aa"
. mencocokkan karakter apa pun
/......../ cocok dengan "Firebase"
(pattern) tanda kurung mengelompokkan pola menjadi satu unit
/(ab)*/ cocok dengan "abab"
a|b cocok dengan a atau b
/a|bc/ cocok dengan "ac" atau "bc"
[akz] kumpulan karakter, cocok dengan salah satu karakter yang disertakan.
/[ABCDEF]/ hanya cocok dengan huruf kapital dari A hingga F.
[a-z] interval karakter, mencocokkan semua karakter secara inklusif dalam rentang yang ditentukan.
/[0-9A-F]+/ mencocokkan string heksadesimal
[^0-9] ^ di awal meniadakan himpunan karakter, mencocokkan apa pun selain himpunan karakter yang ditentukan.

i di belakang konstruksi literal ekspresi reguler (mis. /yes/i) menunjukkan bahwa pencocokan tidak peka huruf besar/kecil. Pengubah ekspresi reguler lainnya saat ini tidak didukung.

Pencocokan ekspresi reguler dalam Aturan Keamanan Firebase Realtime Database tidak serakah maupun tidak serakah, karena hanya memungkinkan Anda mendeteksi kecocokan dan tidak menangkap bagian string.

Penggunaan

Mewajibkan string berupa tanggal dalam format YYYY-MM-DD antara 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])$/)"

Mewajibkan string berupa alamat email:

".validate": "newData.isString() && newData.val().matches(/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$/i)"

Memerlukan string menjadi URL dasar:

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