Regular Expressions
उपयोगी रेगेक्स शोकेस
खोज…
एक तिथि का मिलान करें
आपको याद रखना चाहिए कि रेगेक्स को एक तिथि (या नहीं) के मिलान के लिए डिज़ाइन किया गया था। यह कहना कि एक तारीख वैध है एक और अधिक जटिल संघर्ष है, क्योंकि इसके लिए बहुत अधिक अपवाद से निपटने की आवश्यकता होगी ( लीप वर्ष की स्थिति देखें)।
आइए महीने का मिलान शुरू करके (1 - 12) एक वैकल्पिक अग्रणी 0 के साथ करें:
0?[1-9]|1[0-2]
दिन का मिलान करने के लिए, एक वैकल्पिक अग्रणी 0 के साथ भी:
0?[1-9]|[12][0-9]|3[01]
और वर्ष का मिलान करने के लिए (आइए बस 1900 की सीमा मान लें - 2999):
(?:19|20)[0-9]{2}
विभाजक एक अंतरिक्ष हो सकता है, एक पानी का छींटा, एक स्लेश, खाली, आदि जो कुछ भी आपको लगता है कि एक अलगाव के रूप में इस्तेमाल किया जा सकता है जोड़ने के लिए स्वतंत्र महसूस करें:
[-\\/ ]?
अब आप पूरी बात समझें और प्राप्त करें:
(0?[1-9]|1[0-2])[-\\/ ]?(0?[1-9]|[12][0-9]|3[01])[-/ ]?(?:19|20)[0-9]{2} // MMDDYYYY
(0?[1-9]|[12][0-9]|3[01])[-\\/ ]?(0?[1-9]|1[0-2])[-/ ]?(?:19|20)[0-9]{2} // DDMMYYYY
(?:19|20)[0-9]{2}[-\\/ ]?(0?[1-9]|1[0-2])[-/ ]?(0?[1-9]|[12][0-9]|3[01]) // YYYYMMDD
यदि आप थोड़ा अधिक पांडित्यपूर्ण होना चाहते हैं, तो आप एक बैक रेफरेंस का उपयोग करके यह सुनिश्चित कर सकते हैं कि दो विभाजक समान होंगे:
(0?[1-9]|1[0-2])([-\\/ ]?)(0?[1-9]|[12][0-9]|3[01])\2(?:19|20)[0-9]{2} // MMDDYYYY
^ refer to [-/ ]
(0?[1-9]|[12][0-9]|3[01])([-\\/ ]?)(0?[1-9]|1[0-2])\2(?:19|20)[0-9]{2} // DDMMYYYY
(?:19|20)[0-9]{2}([-\\/ ]?)(0?[1-9]|1[0-2])\2(0?[1-9]|[12][0-9]|3[01]) // YYYYMMDD
एक ईमेल पते से मिलान करें
एक स्ट्रिंग के भीतर एक ईमेल पते से मेल खाना एक कठिन काम है, क्योंकि इसे परिभाषित करने वाला विनिर्देश, RFC2822 , जटिल है जिससे रीगेक्स के रूप में इसे लागू करना मुश्किल हो जाता है। अधिक विवरण के लिए किसी ईमेल को रेगेक्स के साथ मेल करना एक अच्छा विचार क्यों नहीं है, कृपया रीपेक्स का उपयोग न करने पर एंटीपैटर्न उदाहरण का उल्लेख करें : मेलों के मिलान के लिए । उस पेज से नोट करने के लिए सबसे अच्छी सलाह यह है कि इसे लागू करने के लिए अपनी पसंदीदा भाषा में एक समीक्षक और व्यापक रूप से पुस्तकालय का उपयोग करें।
एक ईमेल पता प्रारूप सत्यापित करें
जब आपको यह सुनिश्चित करने के लिए एक प्रविष्टि को तेजी से मान्य करना होगा कि यह एक ईमेल जैसा दिखता है , तो सबसे अच्छा विकल्प यह है कि इसे सरल रखें:
^\S{1,}@\S{2,}\.\S{2,}$
उस regex की जाँच करेगा कि मेल पता एक से अधिक लंबाई के वर्णों का एक गैर-अंतरिक्ष अलग अनुक्रम है, उसके बाद @
, उसके बाद दो लंबाई वाले गैर-रिक्त स्थान वर्णों के दो अनुक्रम होते हैं या a द्वारा अलग किए जाते हैं .
। यह सही नहीं है, और अमान्य पते (प्रारूप के अनुसार) को मान्य कर सकता है, लेकिन सबसे महत्वपूर्ण बात, यह मान्य पते को अमान्य नहीं कर रहा है।
पता मौजूद है की जाँच करें
यह जांचने का एकमात्र विश्वसनीय तरीका है कि एक ईमेल वैध है, इसके अस्तित्व की जांच करना। VRFY
एसएमटीपी कमांड VRFY
करता था जिसे उस उद्देश्य के लिए डिजाइन किया गया था, लेकिन दुख की बात है कि स्पैमर द्वारा दुर्व्यवहार किए जाने के बाद अब यह उपलब्ध नहीं है ।
तो जिस तरह से आप यह जाँच रहे हैं कि मेल वैध है और मौजूद है, केवल एक ही रास्ता उस पते पर ई-मेल भेजना है।
विशाल रेगेक्स विकल्प
हालांकि, रेगेक्स का उपयोग करके एक पते के ईमेल को मान्य करना असंभव नहीं है। एकमात्र मुद्दा यह है कि विनिर्देश के करीब उन रेगीक्स होंगे, वे जितने बड़े होंगे और परिणामस्वरूप वे पढ़ने और बनाए रखने के लिए असंभव हैं। नीचे, आपको ऐसे अधिक सटीक रेगेक्स का उदाहरण मिलेगा जो कुछ पुस्तकालयों में उपयोग किए जा रहे हैं।
⚠️ निम्नलिखित regex प्रलेखन और सीखने के उद्देश्यों के लिए दिए गए हैं, उन्हें अपने कोड में चिपकाना एक बुरा विचार है। इसके बजाय, सीधे उस लाइब्रेरी का उपयोग करें, ताकि आप अपने ईमेल पार्सिंग कोड को अद्यतित और बनाए रखने के लिए अपस्ट्रीम कोड और पीयर डेवलपर्स पर भरोसा कर सकें।
पर्ल एड्रेस मैचिंग मॉड्यूल
ऐसे रेगेक्स का सबसे अच्छा उदाहरण कुछ भाषाओं में है मानक पुस्तकालय। उदाहरण के लिए, पर्ल लाइब्रेरी में RFC::RFC822::Address
मॉड्यूल से एक है जो RFC::RFC822::Address
अनुसार यथासंभव सटीक होने की कोशिश करता है। अपनी जिज्ञासा के लिए आप इस URL पर उस regex का एक संस्करण पा सकते हैं, जो व्याकरण से उत्पन्न हुआ है, और यदि आप इसे कॉपी पेस्ट करने के लिए लुभा रहे हैं, तो regex के लेखक का उद्धरण:
" मैं नियमित अभिव्यक्ति को बनाए नहीं रखता [जुड़ा]। इसमें कीड़े हो सकते हैं जो पहले से ही पर्ल मॉड्यूल में तय किए गए हैं। "
.नेट एड्रेस मैचिंग मॉड्यूल
एक और, छोटा संस्करण EmailAddressAttribute
में एक .Net मानक पुस्तकालय द्वारा उपयोग किया जाता है।
^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$
लेकिन अगर यह छोटा है तो भी पठनीय और आसानी से बनाए रखा जा सकता है।
माणिक पता मिलान मॉड्यूल
रूबी में रेगेक्स की एक संरचना का उपयोग rfc822 मॉड्यूल में एक पते से मेल खाने के लिए किया जा रहा है। यह एक साफ-सुथरा विचार है, जैसा कि बग्स में पाया जाता है, इसे बदलने और ठीक करने के लिए रेगेक्स भाग को इंगित करना आसान होगा।
पायथन एड्रेस मैचिंग मॉड्यूल
एक काउंटर उदाहरण के रूप में, अजगर ईमेल पार्सिंग मॉड्यूल एक रेगेक्स का उपयोग नहीं कर रहा है, बल्कि एक पार्सर का उपयोग करके इसे लागू करता है।
एक फ़ोन नंबर से मिलान करें
यहां उपसर्ग कोड (a +
या (00), फिर 1 से 1939 तक, एक वैकल्पिक स्थान के साथ मिलान करने का तरीका बताया गया है:
यह एक वैध उपसर्ग की तलाश नहीं करता है, लेकिन ऐसा कुछ जो उपसर्ग हो सकता है। उपसर्गों की पूरी सूची देखें
(?:00|\+)?[0-9]{4}
फिर, जैसा कि पूरे फोन नंबर की लंबाई है, अधिकतम 15 पर, हम 14 अंकों तक देख सकते हैं:
उपसर्ग के लिए कम से कम 1 अंक खर्च किया जाता है
[0-9]{1,14}
संख्या में रिक्त स्थान, डॉट्स या डैश हो सकते हैं और 2 या 3 द्वारा समूहीकृत किए जा सकते हैं।
(?:[ .-][0-9]{3}){1,5}
वैकल्पिक उपसर्ग के साथ:
(?:(?:00|\+)?[0-9]{4})?(?:[ .-][0-9]{3}){1,5}
यदि आप एक विशिष्ट देश प्रारूप से मेल खाना चाहते हैं, तो आप इस खोज क्वेरी का उपयोग कर सकते हैं और देश को जोड़ सकते हैं, यह सवाल निश्चित रूप से पहले से ही पूछा गया है।
एक आईपी पते से मिलान करें
आईपीवी 4
IPv4 एड्रेस फॉर्मेट से मिलान करने के लिए, आपको पीरियड्स द्वारा अलग किए गए [0-9]{1,3}
तीन बार {3}
संख्याओं की जांच करनी होगी \.
और एक और संख्या के साथ समाप्त हो रहा है।
^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$
यह नियमित अभिव्यक्ति बहुत सरल है - यदि आप इसे सटीक होना चाहते हैं, तो आपको यह जांचने की आवश्यकता है कि संख्या 0
और 255
बीच है, किसी भी स्थिति में 444
को स्वीकार करने के ऊपर regex के साथ। आप 25[0-5]
, या किसी अन्य 200 मान 2[0-4][0-9]
, या किसी भी 100 मूल्य या उससे कम [01]?[0-9][0-9]
साथ 250-255 के लिए जाँच करना चाहते हैं [01]?[0-9][0-9]
। आप यह देखना चाहते हैं कि यह एक अवधि के बाद है \.
तीन बार {3}
और फिर एक बार बिना अवधि के।
^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$
आईपीवी 6
(IPv6 पतों 8 16-बिट हेक्स कोलन से अलग शब्दों का रूप ले :
) चरित्र। इस मामले में, हम कॉलन के बाद 7 शब्दों की जांच करते हैं, उसके बाद एक ऐसा नहीं है। यदि किसी शब्द में अग्रणी शून्य हैं, तो उन्हें छोटा किया जा सकता है, जिसका अर्थ है कि प्रत्येक शब्द में 1 और 4 हेक्स अंक हो सकते हैं।
^(?:[0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$
यह, हालांकि, अपर्याप्त है। जैसा कि IPv6 पते काफी "वर्डी" बन सकते हैं, मानक निर्दिष्ट करता है कि शून्य-शब्द केवल ::
द्वारा प्रतिस्थापित किया जा सकता है। यह केवल एक पते में एक बार किया जा सकता है (1 और 7 लगातार शब्दों के बीच), क्योंकि यह अन्यथा अनिश्चित होगा। यह कई (बल्कि गंदा) विविधताओं का उत्पादन करता है:
^::(?:[0-9a-fA-F]{1,4}:){0,6}[0-9a-fA-F]{1,4}$
^[0-9a-fA-F]{1,4}::(?:[0-9a-fA-F]{1,4}:){0,5}[0-9a-fA-F]{1,4}$
^[0-9a-fA-F]{1,4}:[0-9a-fA-F]{1,4}::(?:[0-9a-fA-F]{1,4}:){0,4}[0-9a-fA-F]{1,4}$
^(?:[0-9a-fA-F]{1,4}:){0,2}[0-9a-fA-F]{1,4}::(?:[0-9a-fA-F]{1,4}:){0,3}[0-9a-fA-F]{1,4}$
^(?:[0-9a-fA-F]{1,4}:){0,3}[0-9a-fA-F]{1,4}::(?:[0-9a-fA-F]{1,4}:){0,2}[0-9a-fA-F]{1,4}$
^(?:[0-9a-fA-F]{1,4}:){0,4}[0-9a-fA-F]{1,4}::(?:[0-9a-fA-F]{1,4}:)?[0-9a-fA-F]{1,4}$
^(?:[0-9a-fA-F]{1,4}:){0,5}[0-9a-fA-F]{1,4}::[0-9a-fA-F]{1,4}$
^(?:[0-9a-fA-F]{1,4}:){0,6}[0-9a-fA-F]{1,4}::$
अब, यह सब एक साथ (वैकल्पिक का उपयोग करके) पैदावार:
^(?:[0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$|
^::(?:[0-9a-fA-F]{1,4}:){0,6}[0-9a-fA-F]{1,4}$|
^[0-9a-fA-F]{1,4}::(?:[0-9a-fA-F]{1,4}:){0,5}[0-9a-fA-F]{1,4}$|
^[0-9a-fA-F]{1,4}:[0-9a-fA-F]{1,4}::(?:[0-9a-fA-F]{1,4}:){0,4}[0-9a-fA-F]{1,4}$|
^(?:[0-9a-fA-F]{1,4}:){0,2}[0-9a-fA-F]{1,4}::(?:[0-9a-fA-F]{1,4}:){0,3}[0-9a-fA-F]{1,4}$|
^(?:[0-9a-fA-F]{1,4}:){0,3}[0-9a-fA-F]{1,4}::(?:[0-9a-fA-F]{1,4}:){0,2}[0-9a-fA-F]{1,4}$|
^(?:[0-9a-fA-F]{1,4}:){0,4}[0-9a-fA-F]{1,4}::(?:[0-9a-fA-F]{1,4}:)?[0-9a-fA-F]{1,4}$|
^(?:[0-9a-fA-F]{1,4}:){0,5}[0-9a-fA-F]{1,4}::[0-9a-fA-F]{1,4}$|
^(?:[0-9a-fA-F]{1,4}:){0,6}[0-9a-fA-F]{1,4}::$
इसे मल्टीलाइन मोड में और टिप्पणियों के ढेर के साथ लिखना सुनिश्चित करें, जो कोई भी अनिवार्य रूप से यह पता लगाने के साथ कार्य करेगा कि इसका मतलब यह नहीं है कि आप एक कुंद वस्तु के साथ कैसे आते हैं।
एक 12hr और 210 बार स्ट्रिंग मान्य करें
12 घंटे के प्रारूप के लिए कोई भी उपयोग कर सकता है:
^(?:0?[0-9]|1[0-2])[-:][0-5][0-9]\s*[ap]m$
कहाँ पे
-
(?:0?[0-9]|1[0-2])
घंटे है -
[-:]
विभाजक है, जिसे आपकी आवश्यकता के अनुसार समायोजित किया जा सकता है -
[0-5][0-9]
मिनट है -
\s*[ap]m
ने व्हॉट्सएप के किसी भी अक्षर का अनुसरण किया है, औरam
याpm
am
यदि आपको सेकंड चाहिए:
^(?:0?[0-9]|1[0-2])[-:][0-5][0-9][-:][0-5][0-9]\s*[ap]m$
एक 210 समय प्रारूप के लिए:
^(?:[01][0-9]|2[0-3])[-:h][0-5][0-9]$
कहाँ पे:
-
(?:[01][0-9]|2[0-3])
घंटा है -
[-:h]
विभाजक, जिसे आपकी आवश्यकता के अनुसार समायोजित किया जा सकता है -
[0-5][0-9]
मिनट है
सेकंड के साथ:
^(?:[01][0-9]|2[0-3])[-:h][0-5][0-9][-:m][0-5][0-9]$
जहाँ [-:m]
एक दूसरा विभाजक है, h
को मिनटों के लिए m
साथ घंटों के लिए प्रतिस्थापित करता है, और [0-5][0-9]
दूसरा है।
मैच ब्रिटेन पोस्टकोड
यूके में पोस्टकोड का मिलान करने के लिए रेगेक्स
प्रारूप इस प्रकार है, जहां A अक्षर और 9 अंक को दर्शाता है:
स्वरूप | कवरेज | उदाहरण |
---|---|---|
सेल | सेल | |
AA9A 9AA | WC पोस्टकोड क्षेत्र; EC1-EC4, NW1W, SE1P, SW1 | EC1A 1BB |
ए 9 ए 9 एए | ई 1 डब्ल्यू, एन 1 सी, एन 1 पी | W1A 0AX |
ए 9 9 एए, ए 99 9 एए | बी, ई, जी, एल, एम, एन, एस, डब्ल्यू | M1 1AE, B33 8TH |
AA9 9AA, AA99 9AA | अन्य सभी पोस्टकोड | CR2 6XH, DN55 1PT |
(GIR 0AA)|((([A-Z-[QVX]][0-9][0-9]?)|(([A-Z-[QVX]][A-Z-[IJZ]][0-9][0-9]?)|(([A-Z-[QVX]][0-9][A-HJKPSTUW])|([A-Z-[QVX]][A-Z-[IJZ]][0-9][ABEHMNPRVWXY])))) [0-9][A-Z-[CIKMOV]]{2})
जहां पहला भाग:
(GIR 0AA)|((([A-Z-[QVX]][0-9][0-9]?)|(([A-Z-[QVX]][A-Z-[IJZ]][0-9][0-9]?)|(([A-Z-[QVX]][0-9][A-HJKPSTUW])|([A-Z-[QVX]][A-Z-[IJZ]][0-9][ABEHMNPRVWXY]))))
दूसरा:
[0-9][A-Z-[CIKMOV]]{2})