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. Sintaksis ekspresi reguler tidak sama dengan sintaksis ekspresi reguler umum, khususnya:

  • * + . ( ) [ ] { } \ bekerja 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 dimasukkan ke dalam ekspresi keamanan menggunakan notasi /pattern/. Untuk menguji apakah string mematuhi pola ekspresi reguler, gunakan fungsi string anggota yang cocok. Aturan kecocokan berikut memeriksa apakah data baru dimulai dengan string foo.

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

Fitur yang Didukung

Firebase hanya mendukung subset fitur ekspresi reguler umum. Namun, sintaksis ekspresi reguler harus terasa familier.

Berikut adalah simbol yang didukung:

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

i yang ditambahkan di akhir konstruksi literal ekspresi reguler (misalnya, /yes/i) menunjukkan pencocokan tidak peka huruf besar/kecil. Pengubah ekspresi reguler lainnya tidak didukung untuk saat ini.

Pencocokan ekspresi reguler di Firebase Realtime Database Security Rules tidak bersifat serakah atau tidak serakah, karena hanya memungkinkan Anda mendeteksi kecocokan, bukan menangkap bagian string.

Penggunaan

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

Wajibkan string menjadi alamat email:

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

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