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

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