Firebase Güvenlik Kuralları Normal İfadeleri

Düzenli ifade değişmez değerleri, istemci tarafından sağlanan dizeleri doğrulamak için kullanılabilir. Bir dizenin normal ifade düzenine uyup uymadığını test etmek için string.matches(/pattern/) kullanın. Düzenli ifade sözdizimi, özellikle yaygın düzenli ifadeler sözdizimi ile aynı değildir:

  • * + . ( ) [ ] { } \ normal şekilde çalışır.
  • ^ ve $ çapaları yalnızca bunları kalıptaki ilk veya son karakterle eşleştirmek için kullanıyorsak çalışır.
  • yalnızca i (büyük/küçük harf dikkate alınmaz) değiştirici bayrağı desteklenir

Değişmez değerler

Düzenli ifade değişmez değeri, /pattern/ gösterimi kullanılarak bir güvenlik ifadesine eklenir. Bir dizenin normal ifade düzenine uyup uymadığını test etmek için dizenin eşleşen ü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, tipik normal ifade özelliklerinin yalnızca bir alt kümesini destekler. Ancak normal ifade sözdizimi tanıdık gelmelidir.

Bunlar desteklenen sembollerdir:

Karakter Anlam
\s \w \d \S \W \D Boşlukları, bir sözcük karakterini veya bir rakamı ve bunların olumsuzlarını (sırasıyla) eşleştirmek için önceden tanımlanmış karakter kümeleri
\ kaçış, aşağıdaki karakter tam anlamıyla yorumlanır.
Eğer ""'nin kendisiyle eşleşmek istiyorsanız ondan da kaçın /\/
^ dizenin başlangıcına sabitleyin. Bu yalnızca desenin ilk harfi olarak kullanılabilir.
/a/ "ba" ile eşleşirken /^a/ eşleşmez.
$ dizenin sonuna sabitleyin. Bu yalnızca desenin son harfi olarak kullanılabilir.
/a/ "ab" ile eşleşirken /a$/ eşleşmez.
* önceki modelin sıfır veya çoğuyla eşleşir.
/^a*$/ "" ve "aaa" ile eşleşir ancak "b" ile eşleşmez
+ önceki modellerden bir veya daha fazlasıyla eşleşir.
/^a+$/ "a" ve "aaa" ile eşleşir ancak "" ile eşleşmez
? sıfırla veya önceki modellerden biriyle 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 modeli tek bir birimde 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] bir karakter seti, dahil edilen karakterlerden herhangi biriyle eşleşir.
/[ABCDEF]/ yalnızca A'dan F'ye kadar olan büyük harflerle eşleşir.
[az] bir 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 ^ , belirtilen karakter kümesinden başka herhangi bir şeyle eşleşerek karakter kümesini olumsuzlar.

Düzenli ifadenin değişmez yapısının (örn. /yes/i ) ardından gelen i , eşleşmenin büyük/küçük harfe duyarlı olmayacağını gösterir. Diğer düzenli ifade değiştiricileri şu anda desteklenmemektedir.

Firebase Gerçek Zamanlı Veritabanı Güvenlik Kurallarındaki normal ifade eşleştirmesi ne açgözlü ne de açgözlü değildir, çünkü yalnızca bir eşleşmeyi tespit etmenize olanak tanır ve dizenin bölümlerini yakalamanıza izin vermez.

Kullanım

Bir dizenin 1900-2099 arasında YYYY-AA-GG olarak biçimlendirilmiş 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 bir e-posta adresi olmasını zorunlu kılın:

".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ın:

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