استخدام التعبيرات العادية في قواعد الأمان في قاعدة بيانات الوقت الفعلي

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

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

القيم الحرفية

يتمّ إدخال قيمة حرفية للتعبير العادي في تعبير أمان باستخدام الرمز /pattern/. لاختبار ما إذا كانت السلسلة تتطابق مع نمط تعبير عادي، استخدِم دالة العضو matches في السلسلة. تتحقّق قاعدة المطابقة التالية مما إذا كانت البيانات الجديدة تبدأ بالسلسلة 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 أو b
/a|bc/ يطابق "ac" أو "bc"
[akz] مجموعة أحرف، تطابق أيًا من الأحرف المضمّنة.
/[ABCDEF]/ يطابق الأحرف الكبيرة فقط من A إلى F.
[a-z] فاصل أحرف، يطابق جميع الأحرف بشكل شامل في النطاق المحدّد.
/[0-9A-F]+/ يطابق السلاسل السداسية العشرية
[^0-9] تنفي ^ في البداية مجموعة الأحرف، وتطابق أي شيء آخر غير مجموعة الأحرف المحدّدة.

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

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

الاستخدام

يجب أن تكون السلسلة تاريخًا منسّقًا على النحو 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\\-\\.\\?\\,\\'\\/\\\\+&=%\\$#_]*)?$/)"