Realtime Database güvenlik kurallarında normal ifadeler kullanma

Normal ifade değişmezleri, istemci tarafından sağlanan dizeleri doğrulamak için kullanılabilir. Bir dizenin normal ifade modeline uygun olup olmadığını test etmek için string.matches(/pattern/) kullanın. Normal ifade söz dizimi, özellikle aşağıdaki noktalarda yaygın normal ifade söz dizimiyle aynı değildir:

  • * + . ( ) [ ] { } \ normal şekilde çalışır.
  • ^ ve $ sabitleri yalnızca kalıptaki ilk veya son karakteri eşleştirmek için kullanılıyorsa çalışır.
  • Yalnızca i (büyük/küçük harfe duyarlı değil) değiştirici işareti desteklenir.

Değişmez değerler

Normal ifade değişmezi, /pattern/ gösterimi kullanılarak güvenlik ifadesine dahil edilir. Bir dizenin normal ifade desenine uyup uymadığını test etmek için dizenin matches üye işlevini kullanın. Aşağıdaki eşleşme kuralı, yeni verilerin "foo" dizesiyle başlayıp başlamadığını kontrol eder.

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

Desteklenen Özellikler

Firebase, normal ifadelerin yalnızca bir alt kümesini destekler. Ancak normal ifade söz dizimi tanıdık gelecektir.

Desteklenen semboller şunlardır:

Karakter Anlamı
\s \w \d \S \W \D Boşluk, kelime karakteri veya rakamla eşleşme için önceden tanımlanmış karakter kümeleri ve bunların olumsuzlamaları (sırasıyla)
\ kaçış karakteri, sonraki karakter olduğu gibi yorumlanır.
"" ile eşleşme yapmak istiyorsanız bu karakteri de kaçırın. /\/
^ dizenin başına sabitlenir. Bu yalnızca kalıbın ilk harfi olarak kullanılabilir.
/a/, "ba" ile eşleşirken /^a/ eşleşmez.
$ dizenin sonuna sabitlenir. Bu yalnızca kalıbın son harfi olarak kullanılabilir.
/a/ "ab" ile eşleşirken /a$/ ile eşleşmez.
* önceki kalıbın sıfır veya daha fazla tekrarıyla eşleşir.
/^a*$/, "" ve "aaa" ile eşleşir ancak "b" ile eşleşmez
+ önceki kalıbın bir veya daha fazla örneğiyle eşleşir.
/^a+$/, "a" ve "aaa" ile eşleşir ancak "" ile eşleşmez
? önceki kalıbın sıfır veya bir tekrarıyla eşleşir.
/^a?$/, "" ve "a" ile eşleşir ancak "aa" ile eşleşmez
. Herhangi bir karakterle eşleşir.
/......../ "Firebase" ile eşleşir.
(pattern) Parantez, bir kalıbı tek bir birim hâlinde gruplandırır.
/(ab)*/, "abab" ile eşleşir.
a|b a veya b ile eşleşir.
/a|bc/, "ac" veya "bc" ile eşleşir.
[akz] Karakter kümesi, dahil edilen karakterlerden herhangi biriyle eşleşir.
/[ABCDEF]/ yalnızca A-F arasındaki büyük harflerle eşleşir.
[a-z] Karakter aralığı, belirtilen aralıktaki tüm karakterlerle eşleşir.
/[0-9A-F]+/ onaltılık dizelerle eşleşir
[^0-9] Baştaki ^, karakter kümesini olumsuzlar ve belirtilen karakter kümesi dışındaki her şeyle eşleşir.

Normal ifade değişmez yapısının (ör. /yes/i) sonuna eklenen bir i, eşleşmenin büyük/küçük harfe duyarlı olmayacağını gösterir. Diğer normal ifade değiştiriciler şu anda desteklenmemektedir.

Firebase Realtime Database güvenlik kurallarında normal ifade eşleştirme, yalnızca eşleşme algılamanıza izin verip dizenin bölümlerini yakalamanıza izin vermediğinden ne açgözlüdür ne de açgözlü değildir.

Kullanım

Bir dizenin 1900-2099 arasında YYYY-AA-GG biçiminde bir tarih olmasını zorunlu kılın:

".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])$/)"

Dizenin e-posta adresi olmasını zorunlu kılma:

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

Dizenin temel bir URL olmasını zorunlu kıl:

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