Firebase सुरक्षा नियम रेगुलर एक्सप्रेशन

रेगुलर एक्सप्रेशन की लिटरल वैल्यू का इस्तेमाल, क्लाइंट से मिली स्ट्रिंग की पुष्टि करने के लिए किया जा सकता है. string.matches(/pattern/) का इस्तेमाल करके जांच करें कि कोई स्ट्रिंग, रेगुलर एक्सप्रेशन के पैटर्न का पालन करती है या नहीं. रेगुलर एक्सप्रेशन सिंटैक्स, खास तौर पर सामान्य रेगुलर एक्सप्रेशन सिंटैक्स के जैसा नहीं है:

  • * + . ( ) [ ] { } \ सामान्य तरीके से काम करें.
  • ^ और $ ऐंकर सिर्फ़ तब काम करते हैं, जब हम उनका इस्तेमाल पैटर्न के पहले या आखिरी वर्ण से मैच करने के लिए करते हैं.
  • सिर्फ़ i (छोटे-बड़े अक्षरों को अनदेखा करें) मॉडिफ़ायर फ़्लैग काम करता है

लिटरल वैल्यू

/pattern/ नोटेशन का इस्तेमाल करके, रेगुलर एक्सप्रेशन लिटरल को सिक्योरिटी एक्सप्रेशन में लाया जाता है. यह देखने के लिए कि कोई स्ट्रिंग रेगुलर एक्सप्रेशन पैटर्न के हिसाब से है या नहीं, स्ट्रिंग के 'सदस्य से मिलता-जुलता फ़ंक्शन' का इस्तेमाल करें. यहां दिए गए नियम से यह जांच की जाती है कि नया डेटा, स्ट्रिंग foo से शुरू होता है या नहीं.

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

इस्तेमाल की जा सकने वाली सुविधाएं

Firebase, सामान्य रेगुलर एक्सप्रेशन सुविधाओं के सिर्फ़ किसी सबसेट के साथ काम करता है. हालांकि, रेगुलर एक्सप्रेशन सिंटैक्स जाना-पहचाना होना चाहिए.

इन चिह्नों का इस्तेमाल किया जा सकता है:

वर्ण मतलब
\s \w \d \S \W \D खाली सफ़ेद जगह, शब्द वाले वर्ण या किसी अंक और उनके नेगेटिव से मेल खाने के लिए, पहले से तय वर्ण सेट (कम से कम)
\ Esc है, तो नीचे दिए गए वर्ण की शाब्दिक व्याख्या की जाती है.
अगर आप "" से मिलान करना चाहते हैं उसे भी छोड़ दें /\/
^ स्ट्रिंग की शुरुआत में ऐंकर करें. इसका इस्तेमाल सिर्फ़ पैटर्न के पहले अक्षर के तौर पर किया जा सकता है.
/a/ "ba" से मेल खाता है, जबकि /^a/ से ऐसा नहीं होता.
$ ऐंकर करें. इसका इस्तेमाल सिर्फ़ पैटर्न के आखिरी अक्षर के तौर पर किया जा सकता है. /a/
"ab" से मेल खाता है, जबकि /a$/ "ab" से मेल नहीं खाता.
* पिछले पैटर्न के शून्य या कई से मेल खाता है.
/^a*$/ "" से मेल खाता है और "aaa", लेकिन "b" नहीं
+ पिछले पैटर्न में से एक या ज़्यादा से मेल खाता है.
/^a+$/ "a" से मेल खाता है और "aaa", लेकिन "" नहीं
? शून्य या पिछले पैटर्न में से एक से मेल खाता है.
/^a?$/ "" से मेल खाता है और "a", लेकिन "aa" नहीं
. किसी भी वर्ण से मेल खाता है
/......../ "Firebase" से मेल खाता है
(pattern) कोष्ठक, पैटर्न को एकल इकाई में समूहबद्ध करता है
/(ab)*/ "aबाबा" से मेल खाता है
a|b a या b से मेल खाता है
/a|bc/ "ac" से मेल खाता है या "bc"
[akz] वर्ण सेट, शामिल किए गए किसी भी वर्ण से मेल खाता है.
/[ABCDEF]/ केवल बड़े अक्षरों से मेल खाते हैं A से F तक के वर्ण शामिल हैं.
[a-z] वर्ण इंटरवल, दी गई रेंज में मौजूद सभी वर्णों से मेल खाता है. /[0-9A-F]+/
हेक्साडेसिमल स्ट्रिंग से मेल खाता है
[^0-9] आगे वाला ^, वर्ण सेट को नकार देता है. यह तय वर्ण सेट के अलावा किसी भी अन्य चीज़ से मेल खाता है.

रेगुलर एक्सप्रेशन लिटरल कंस्ट्रक्शन (उदाहरण के लिए, /yes/i) के बाद आने वाला i दिखाता है कि मैचिंग केस-इनसेंसिटिव होगी. फ़िलहाल, अन्य रेगुलर एक्सप्रेशन मॉडिफ़ायर का इस्तेमाल नहीं किया जा सकता.

Firebase Realtime Database Security Rules में रेगुलर एक्सप्रेशन का मैच करने वाला कीवर्ड न तो लालची होता है और न ही लालची. ऐसा इसलिए, क्योंकि इससे सिर्फ़ मिलते-जुलते कीवर्ड का पता लगाया जा सकता है, स्ट्रिंग के हिस्सों को कैप्चर नहीं किया जा सकता.

इस्तेमाल किए जाने से जुड़ी जानकारी

स्ट्रिंग को 1900-2099 के बीच 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)"

बुनियादी यूआरएल होने के लिए स्ट्रिंग ज़रूरी है:

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