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

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

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

الاستخدام

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