כללי אבטחה של 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 או ב
/a|bc/ מתאים ל-"ac" או "bc"
[akz] ערכת תווים, תואמת לכל אחת מהתווים הכלולים.
/[ABCDEF]/ מתאים רק לאותיות באותיות רישיות מ-A עד F.
[az] מרווח תווים, תואם את כל התווים כולל בטווח שצוין.
/[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)"

דרוש שהמחרוזת תהיה כתובת אתר בסיסית:

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