रीयलटाइम डेटाबेस के सुरक्षा नियमों में रेगुलर एक्सप्रेशन का इस्तेमाल करना

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

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

लिटरल वैल्यू

रेगुलर एक्सप्रेशन लिटरल को /pattern/ नोटेशन का इस्तेमाल करके, सुरक्षा एक्सप्रेशन में शामिल किया जाता है. यह देखने के लिए कि कोई स्ट्रिंग, रेगुलर एक्सप्रेशन पैटर्न के मुताबिक है या नहीं, स्ट्रिंग के matches सदस्य फ़ंक्शन का इस्तेमाल करें. मैच करने का यह नियम, यह जांचता है कि नया डेटा, 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 तक के बड़े अक्षरों से मैच होता है.
[a-z] वर्णों का इंटरवल, तय की गई रेंज में शामिल सभी वर्णों से मैच होता है.
/[0-9A-F]+/ , हेक्साडेसिमल स्ट्रिंग से मैच होता है
[^0-9] शुरुआत में मौजूद ^, वर्णों के सेट को नेगेट करता है. साथ ही, तय किए गए वर्णों के सेट के अलावा किसी भी वर्ण से मैच होता है.

रेगुलर एक्सप्रेशन लिटरल कंस्ट्रक्शन (जैसे, /yes/i) के आखिर में मौजूद 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\\-\\.\\?\\,\\'\\/\\\\+&=%\\$#_]*)?$/)"