אפשר להשתמש בליטרלים של ביטויים רגולריים כדי לאמת מחרוזות שסופקו על ידי הלקוח. משתמשים ב-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\\-\\.\\?\\,\\'\\/\\\\+&=%\\$#_]*)?$/)"