שימוש בביטויים רגולריים בכללי אבטחה של מסד נתונים בזמן אמת

אפשר להשתמש בליטרלים של ביטויים רגולריים כדי לאמת מחרוזות שסופקו על ידי הלקוח. משתמשים ב-string.matches(/pattern/) כדי לבדוק אם מחרוזת תואמת לדפוס של ביטוי רגולרי. התחביר של הביטויים הרגולריים לא זהה לתחביר של ביטויים רגולריים נפוצים, במיוחד:

  • * + . ( ) [ ] { } \ פועל כרגיל.
  • העוגנים ^ ו-$ פועלים רק אם משתמשים בהם כדי להתאים לתווים הראשונים או האחרונים בתבנית.
  • יש תמיכה רק בדגל של משנה i (אין חשיבות לאותיות גדולות או קטנות)

Literals

מחרוזת של ביטוי רגולרי מוצגת בביטוי אבטחה באמצעות הסימון /pattern/. כדי לבדוק אם מחרוזת תואמת לתבנית של ביטוי רגולרי, משתמשים בפונקציית החבר matches של המחרוזת. כלל ההתאמה הבא בודק אם הנתונים החדשים מתחילים במחרוזת foo.

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

תכונות נתמכות

‫Firebase תומך רק בקבוצת משנה של תכונות אופייניות של ביטויים רגולריים. עם זאת, התחביר של הביטוי הרגולרי אמור להיות מוכר.

אלה הסמלים הנתמכים:

דמות משמעות
\s \w \d \S \W \D מערכות תווים מוגדרות מראש להתאמת רווחים, תו במילה או ספרה, והשלילות שלהם (בהתאמה)
\ escape, התו שאחריו יפורש באופן מילולי. ‫
אם רוצים להתאים את התו '' עצמו, צריך להוסיף גם לו תו בריחה /\/
^ העוגן לתחילת המחרוזת. אפשר להשתמש בתו הזה רק כאות הראשונה בתבנית. ‫
/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\\-\\.\\?\\,\\'\\/\\\\+&=%\\$#_]*)?$/)"