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

रेगुलर एक्सप्रेशन लिटरल का इस्तेमाल, क्लाइंट की ओर से दी गई स्ट्रिंग की पुष्टि करने के लिए किया जा सकता है. यह जांचने के लिए कि कोई स्ट्रिंग, रेगुलर एक्सप्रेशन पैटर्न के मुताबिक है या नहीं, 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 रीयलटाइम डेटाबेस के सुरक्षा नियमों में रेगुलर एक्सप्रेशन मैचिंग, न तो ग्रीडी होती है और न ही नॉन-ग्रीडी. ऐसा इसलिए, क्योंकि यह सिर्फ़ मैच का पता लगाने की अनुमति देता है, न कि स्ट्रिंग के हिस्सों को कैप्चर करने की.

इस्तेमाल

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