রিয়েলটাইম ডাটাবেস নিরাপত্তা নিয়মে রেগুলার এক্সপ্রেশন ব্যবহার করুন

ক্লায়েন্ট কর্তৃক সরবরাহকৃত স্ট্রিং যাচাই করার জন্য রেগুলার এক্সপ্রেশন লিটারেল ব্যবহার করা যেতে পারে। কোনো স্ট্রিং একটি রেগুলার এক্সপ্রেশন প্যাটার্ন মেনে চলে কিনা তা পরীক্ষা করতে string.matches(/pattern/) ব্যবহার করুন। রেগুলার এক্সপ্রেশনের সিনট্যাক্স সাধারণ রেগুলার এক্সপ্রেশন সিনট্যাক্সের মতো হুবহু এক নয়, বিশেষ করে:

  • * + . ( ) [ ] { } \ স্বাভাবিকভাবে কাজ করবে।
  • ^ এবং $ অ্যাঙ্কর শুধুমাত্র তখনই কাজ করে, যখন আমরা প্যাটার্নের প্রথম বা শেষ অক্ষর মেলানোর জন্য এগুলো ব্যবহার করি।
  • শুধুমাত্র i (কেস উপেক্ষা) মডিফায়ার ফ্ল্যাগটি সমর্থিত।

আক্ষরিক

/pattern/ নোটেশন ব্যবহার করে একটি সিকিউরিটি এক্সপ্রেশনে রেগুলার এক্সপ্রেশন লিটারেল অন্তর্ভুক্ত করা হয়। কোনো স্ট্রিং একটি রেগুলার এক্সপ্রেশন প্যাটার্ন মেনে চলে কিনা তা পরীক্ষা করতে, string-এর matches মেম্বার ফাংশনটি ব্যবহার করুন। নিম্নলিখিত matches রুলটি পরীক্ষা করে দেখে যে নতুন ডেটাটি ‘foo’ স্ট্রিং দিয়ে শুরু হয় কিনা।

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

সমর্থিত বৈশিষ্ট্য

ফায়ারবেস প্রচলিত রেগুলার এক্সপ্রেশন ফিচারগুলোর কেবল একটি ক্ষুদ্র অংশই সমর্থন করে। তবে, রেগুলার এক্সপ্রেশনের সিনট্যাক্সটি আপনার কাছে পরিচিত মনে হবে।

এগুলো হলো সমর্থিত প্রতীকসমূহ:

চরিত্র অর্থ
\s \w \d \S \W \D যথাক্রমে হোয়াইটস্পেস, কোনো শব্দ অক্ষর বা সংখ্যা মেলানোর জন্য পূর্বনির্ধারিত অক্ষর সেট এবং তাদের বিপরীতার্থক রূপ।
\ escape, এর পরের অক্ষরটিকে আক্ষরিকভাবে ব্যাখ্যা করা হয়।
যদি আপনি সরাসরি "" এর সাথেই মেলাতে চান, তাহলে এটিকে /\/ এস্কেপ করুন।
^ স্ট্রিং-এর শুরুতে অ্যাঙ্কর করুন। এটি শুধুমাত্র প্যাটার্নের প্রথম অক্ষর হিসেবে ব্যবহার করা যাবে।
/a/ "ba"-এর সাথে মেলে, কিন্তু /^a/ মেলে না।
$ সুতার শেষ প্রান্তে নোঙর করুন। এটি শুধুমাত্র প্যাটার্নের শেষ অক্ষর হিসেবে ব্যবহার করা যাবে।
/a/ 'ab'-এর সাথে মেলে, কিন্তু /a$/ মেলে না।
* পূর্ববর্তী প্যাটার্নের শূন্য বা অনেকগুলোর সাথে মেলে।
/^a*$/ "" এবং "aaa" এর সাথে মেলে, কিন্তু "b" এর সাথে মেলে না।
+ পূর্ববর্তী প্যাটার্নের এক বা একাধিকের সাথে মেলে।
/^a+$/ 'a' এবং 'aaa'-কে ম্যাচ করে, কিন্তু '" কে নয়।
? পূর্ববর্তী প্যাটার্নের শূন্য বা একটির সাথে মেলে।
/^a?$/ "" এবং "a" কে মেলায়, কিন্তু "aa" কে মেলায় না।
. যেকোনো চরিত্রের সাথে মেলে
/......../ 'ফায়ারবেস'-এর সাথে মেলে
(pattern) বন্ধনী একটি প্যাটার্নকে একক ইউনিটে একত্রিত করে
/(ab)*/ "abab"-এর সাথে মেলে
a|b হয় a অথবা b এর সাথে মেলে
/a|bc/ "ac" বা "bc"-এর সাথে মেলে।
[akz] একটি অক্ষর সেট, যা অন্তর্ভুক্ত যেকোনো অক্ষরের সাথে মেলে।
/[ABCDEF]/ শুধুমাত্র A থেকে F পর্যন্ত বড় হাতের অক্ষরগুলোকে মেলায়।
[az] একটি অক্ষর ব্যবধান, যা নির্দিষ্ট পরিসরের অন্তর্ভুক্ত সকল অক্ষরকে মেলায়।
/[0-9A-F]+/ হেক্সাডেসিমাল স্ট্রিংগুলির সাথে মেলে
[^0-9] শুরুতে একটি ^ চিহ্ন থাকলে তা ক্যারেক্টার সেটকে বাতিল করে দেয় এবং নির্দিষ্ট ক্যারেক্টার সেট ছাড়া অন্য যেকোনো কিছুর সাথে মিলে যায়।

রেগুলার এক্সপ্রেশন লিটারেল গঠনের শেষে একটি i থাকলে (যেমন /yes/i ) বোঝা যায় যে ম্যাচিংটি কেস-ইনসেনসিটিভ হবে। এই মুহূর্তে অন্যান্য রেগুলার এক্সপ্রেশন মডিফায়ার সমর্থিত নয়।

ফায়ারবেস রিয়েলটাইম ডেটাবেস সিকিউরিটি রুলস-এ রেগুলার এক্সপ্রেশন ম্যাচিং গ্রিডি বা নন-গ্রিডি কোনোটিই নয়, কারণ এটি আপনাকে শুধুমাত্র একটি মিল খুঁজে বের করার সুযোগ দেয়, স্ট্রিং-এর কোনো অংশবিশেষ ক্যাপচার করার সুযোগ দেয় না।

ব্যবহার

একটি স্ট্রিংকে অবশ্যই ১৯০০ থেকে ২০৯৯ সালের মধ্যে YYYY-MM-DD ফরম্যাটে একটি তারিখ হতে হবে:

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