قواعد أمان Firebase التعبيرات العادية

يمكن استخدام حرفية التعبير العادي للتحقق من صحة السلاسل المقدمة من قبل العميل. استخدم string.matches(/pattern/) لاختبار ما إذا كانت السلسلة تلتزم بنمط التعبير العادي. بناء جملة التعبير العادي ليس متطابقًا مع بناء جملة التعبيرات العادية الشائعة، على وجه الخصوص:

  • * + . ( ) [ ] { } \ يعمل كالمعتاد.
  • تعمل نقاط الربط ^ و $ فقط إذا كنا نستخدمها لمطابقة الحرف الأول أو الأخير في النمط.
  • يتم دعم علامة التعديل i (تجاهل حالة الأحرف) فقط

حرفية

يتم إدخال حرفي التعبير العادي في تعبير الأمان باستخدام الترميز /pattern/ . لاختبار ما إذا كانت السلسلة تلتزم بنمط التعبير العادي، استخدم وظيفة العضو المطابق للسلسلة. تتحقق قاعدة التطابقات التالية مما إذا كانت البيانات الجديدة تبدأ بالسلسلة foo.

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

الميزات المدعومة

يدعم Firebase فقط مجموعة فرعية من ميزات التعبير العادي النموذجية. ومع ذلك، يجب أن تبدو بنية التعبير العادي مألوفة.

هذه هي الرموز المدعومة:

شخصية معنى
\s \w \d \S \W \D مجموعات أحرف محددة مسبقًا لمطابقة المسافات البيضاء أو حرف الكلمة أو الرقم ونفيها (على التوالي)
\ الهروب، يتم تفسير الحرف التالي حرفيا.
إذا كنت تريد المطابقة على "" نفسها، فاهرب منها أيضًا /\/
^ مرساة إلى بداية السلسلة. لا يمكن استخدام هذا إلا كحرف أول من النمط.
/a/ يطابق "ba"، بينما /^a/ لا يطابقه.
$ مرساة إلى نهاية السلسلة. لا يمكن استخدام هذا إلا كحرف أخير من النموذج.
/a/ يطابق "ab"، بينما /a$/ لا يطابقه.
* يطابق الصفر أو الكثير من النمط السابق.
/^a*$/ يطابق "" و"aaa"، ولكن ليس "b"
+ يطابق واحدًا أو أكثر من النمط السابق.
/^a+$/ يطابق "a" و"aaa"، لكن ليس ""
? يتطابق مع صفر أو واحد من النمط السابق.
/^a?$/ يطابق "" و"a"، ولكن ليس "aa"
. يطابق أي حرف
/......../ يتطابق مع "Firebase"
(pattern) تجمع الأقواس النمط في وحدة واحدة
/(ab)*/ يطابق "abab"
a|b يطابق إما أ أو ب
/a|bc/ يطابق "ac" أو "bc"
[akz] مجموعة أحرف، تتطابق مع أي من الأحرف المضمنة.
/[ABCDEF]/ يطابق فقط الأحرف الكبيرة من A إلى F.
[az] فاصل زمني للأحرف، يطابق جميع الأحرف بشكل شامل في النطاق المحدد.
/[0-9A-F]+/ يطابق السلاسل السداسية العشرية
[^0-9] يؤدي ^ البادئة إلى إلغاء مجموعة الأحرف، ومطابقة أي شيء آخر غير مجموعة الأحرف المحددة.

تشير i التي تتبع البناء الحرفي للتعبير العادي (على سبيل المثال /yes/i ) إلى أن المطابقة ستكون غير حساسة لحالة الأحرف. معدّلات التعبير العادي الأخرى غير مدعومة في الوقت الحالي.

مطابقة التعبير العادي في قواعد أمان قاعدة بيانات Firebase Realtime ليست جشعة ولا غير جشعة، لأنها تسمح لك فقط باكتشاف التطابق وليس التقاط أجزاء من السلسلة.

الاستخدام

يلزم أن تكون السلسلة عبارة عن تاريخ بتنسيق YYYY-MM-DD بين 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])$/)"

تتطلب السلسلة لتكون عنوان بريد إلكتروني:

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

تتطلب السلسلة أن تكون عنوان URL أساسيًا:

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