Ekspresi Reguler Aturan Keamanan Firebase

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

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

harfiah

Literal ekspresi reguler dimasukkan ke dalam ekspresi keamanan menggunakan notasi /pattern/ . Untuk menguji apakah string mematuhi pola ekspresi reguler, gunakan fungsi anggota string yang cocok. 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.

Ini adalah simbol yang didukung:

Karakter Arti
\s \w \d \S \W \D kumpulan karakter yang telah ditentukan sebelumnya untuk mencocokkan spasi, karakter kata, atau angka, dan negasinya (masing-masing)
\ melarikan diri, karakter berikut diartikan secara harfiah.
Jika Anda ingin mencocokkan pada "" itu sendiri, hindari juga /\/
^ jangkar ke awal string. Ini hanya dapat digunakan sebagai huruf pertama dari polanya.
/a/ cocok dengan "ba", sedangkan /^a/ tidak.
$ jangkar ke ujung string. Ini hanya dapat digunakan sebagai huruf terakhir dari polanya.
/a/ cocok dengan "ab", sedangkan /a$/ tidak.
* cocok dengan nol atau banyak pola sebelumnya.
/^a*$/ cocok dengan "" dan "aaa", tetapi tidak dengan "b"
+ cocok dengan satu atau lebih pola sebelumnya.
/^a+$/ cocok dengan "a" dan "aaa", tetapi tidak dengan ""
? cocok dengan nol atau salah satu pola sebelumnya.
/^a?$/ cocok dengan "" dan "a", tetapi tidak dengan "aa"
. cocok dengan karakter apa pun
/......../ cocok dengan "Firebase"
(pattern) tanda kurung mengelompokkan suatu pola menjadi satu kesatuan
/(ab)*/ cocok dengan "abab"
a|b cocok dengan a atau b
/a|bc/ cocok dengan "ac" atau "bc"
[akz] satu set karakter, cocok dengan karakter mana pun yang disertakan.
/[ABCDEF]/ hanya cocok dengan huruf kapital dari A hingga F.
[az] interval karakter, cocok dengan semua karakter secara inklusif dalam rentang yang ditentukan.
/[0-9A-F]+/ cocok dengan string heksadesimal
[^0-9] Awalan ^ meniadakan kumpulan karakter, mencocokkan apa pun selain kumpulan karakter yang ditentukan.

Tanda i di akhir konstruksi literal ekspresi reguler (misalnya /yes/i ) menunjukkan bahwa pencocokannya tidak peka huruf besar-kecil. Pengubah ekspresi reguler lainnya tidak didukung saat ini.

Pencocokan ekspresi reguler dalam Aturan Keamanan Firebase Realtime Database tidak bersifat serakah atau tidak serakah, karena pencocokan ini hanya memungkinkan Anda mendeteksi kecocokan dan tidak menangkap sebagian string.

Penggunaan

Memerlukan string dengan format tanggal 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])$/)"

Memerlukan string untuk menjadi alamat email:

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

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