قوانین امنیتی 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 یا b مطابقت دارد
/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)"

نیاز است که رشته یک 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\\-\\.\\?\\,\\'\\/\\\\+&=%\\$#_]*)?$/)"