प्रत्येक वेब डेवलपर इस भावना को जानता है: आपने एक फ़ॉर्म बनाया है, और जब आप महसूस करते हैं कि अब आपको प्रत्येक फ़ील्ड को मान्य करना है, तो आप कराहते हैं।
शुक्र है, फॉर्म सत्यापन को दर्दनाक नहीं होना चाहिए। आप कई सामान्य सत्यापन आवश्यकताओं को संभालने के लिए नियमित अभिव्यक्तियों का उपयोग कर सकते हैं।
रेगुलर एक्सप्रेशन क्या हैं?
रेगुलर एक्सप्रेशन ऐसे पैटर्न का वर्णन करते हैं जो स्ट्रिंग्स में वर्णों के संयोजन से मेल खाते हैं। आप उनका उपयोग "केवल संख्याएं" या "बिल्कुल पांच अपरकेस अक्षरों" जैसी अवधारणाओं का प्रतिनिधित्व करने के लिए कर सकते हैं।
नियमित अभिव्यक्ति (जिसे रेगेक्स भी कहा जाता है) शक्तिशाली उपकरण हैं। उनके कई उपयोग हैं, जिनमें उन्नत खोज, खोज-और-प्रतिस्थापन, और स्ट्रिंग्स पर सत्यापन संचालन शामिल हैं। रेगुलर एक्सप्रेशन का एक प्रसिद्ध अनुप्रयोग है लिनक्स में grep कमांड.
सत्यापन के लिए नियमित अभिव्यक्तियों का उपयोग क्यों करें?
वहां कई हैं फॉर्म इनपुट को मान्य करने के तरीके, लेकिन रेगुलर एक्सप्रेशन सरल, तेज़ और उपयोग करने में सुविधाजनक हैं यदि आप समझते हैं कि कैसे।
नियमित अभिव्यक्तियों के लिए जावास्क्रिप्ट का मूल समर्थन है। इसका मतलब है कि बाहरी पुस्तकालय के विपरीत सत्यापन के लिए उनका उपयोग करना आपके वेब एप्लिकेशन के आकार को यथासंभव छोटा रखने में मदद करता है।
रेगुलर एक्सप्रेशन कई प्रकार के फॉर्म इनपुट को मान्य करने में भी सक्षम हैं।
नियमित अभिव्यक्तियों की मूल बातें
रेगुलर एक्सप्रेशन में ऐसे प्रतीक होते हैं जो एक स्ट्रिंग में वर्णों द्वारा बनाए गए पैटर्न का वर्णन करते हैं। जावास्क्रिप्ट में, आप दो फ़ॉरवर्ड स्लैश के बीच लिखकर एक रेगुलर एक्सप्रेशन शाब्दिक बना सकते हैं। नियमित अभिव्यक्ति का सबसे सरल रूप इस तरह दिखता है:
/abc/
उपरोक्त रेगुलर एक्सप्रेशन किसी भी स्ट्रिंग से मेल खाएगा जिसमें "ए", "बी" और "सी" वर्ण शामिल हैं, उस क्रम में, लगातार। स्ट्रिंग "abc" उस रेगुलर एक्सप्रेशन के साथ-साथ "abcdef" जैसी स्ट्रिंग से मेल खाएगी।
आप अपने रेगुलर एक्सप्रेशन में विशेष वर्णों का उपयोग करके अधिक उन्नत पैटर्न का वर्णन कर सकते हैं। विशेष वर्ण एक शाब्दिक चरित्र का प्रतिनिधित्व नहीं करते हैं, लेकिन वे आपके रेगेक्स को अधिक अभिव्यक्तिपूर्ण बनाते हैं।
आप उनका उपयोग यह निर्दिष्ट करने के लिए कर सकते हैं कि पैटर्न का एक हिस्सा निश्चित संख्या में दोहराना चाहिए, या यह इंगित करने के लिए कि कुछ पैटर्न वैकल्पिक है।
एक विशेष वर्ण का एक उदाहरण "*" है। "*" वर्ण या तो एकल वर्ण या वर्णों के समूह को संशोधित करता है, जो इससे पहले आते हैं। यह घोषणा करता है कि वे पात्र अनुपस्थित हो सकते हैं या लगातार कई बार खुद को दोहरा सकते हैं। उदाहरण के लिए:
/abc*/
"ab" से मेल खाएगा और उसके बाद "c" वर्णों की कोई भी संख्या होगी। स्ट्रिंग "ab" उस पैटर्न का एक मान्य उदाहरण है, क्योंकि वर्ण "c" वैकल्पिक है। स्ट्रिंग्स "abc" और "abccccc" समान रूप से मान्य हैं, क्योंकि "*" का अर्थ है कि "c" कितनी भी बार दोहरा सकता है।
पूर्ण रेगेक्स सिंटैक्स संभावित मिलानों का वर्णन करने के लिए कई और पैटर्न वर्णों का उपयोग करता है। आप. से और सीख सकते हैं regexlearn.com का रेगेक्स 101 इंटरैक्टिव पाठ्यक्रम। एमडीएन की जावास्क्रिप्ट गाइड भी बहुत उपयोगी है।
नियमित अभिव्यक्तियों के साथ फॉर्म सत्यापन
आप फॉर्म इनपुट को दो तरीकों से सत्यापित करने के लिए रेगेक्स का उपयोग कर सकते हैं। जावास्क्रिप्ट का उपयोग करने का पहला तरीका है। इसमें कुछ चरण शामिल हैं:
- फॉर्म इनपुट का मूल्य प्राप्त करें।
- जांचें कि क्या इनपुट का मान रेगुलर एक्सप्रेशन से मेल खाता है।
- यदि ऐसा नहीं होता है, तो वेबसाइट के उपयोगकर्ता को प्रदर्शित करें कि इनपुट फ़ील्ड का मान अमान्य है।
यहाँ एक छोटा सा उदाहरण है। इस तरह एक इनपुट फ़ील्ड को देखते हुए:
<इनपुट प्लेसहोल्डर ="इनपुट क्षेत्र">
आप इसे इस तरह सत्यापित करने के लिए एक फ़ंक्शन लिख सकते हैं:
समारोहसत्यापित करें() {
होने देना मूल्य = दस्तावेज़.querySelector ("इनपुट")। मान;
स्थिरांक रेगेक्स = /^.{3,7}$/;
वापसी regEx.test (मान);
}
दूसरा तरीका ब्राउज़र की HTML फॉर्म सत्यापन क्षमताओं का लाभ उठाना है। कैसे? HTML इनपुट टैग के पैटर्न विशेषता के मान के रूप में रेगेक्स को निर्दिष्ट करके।
पैटर्न विशेषता केवल निम्न प्रकार के इनपुट के लिए मान्य है: टेक्स्ट, टेली, ईमेल, यूआरएल, पासवर्ड, और खोज।
यहां पैटर्न विशेषता का उपयोग करके एक उदाहरण दिया गया है:
<प्रपत्र>
<इनपुट प्लेसहोल्डर ="इनपुट क्षेत्र" आवश्यक पैटर्न ="/^.{3,7}$/">
<बटन>प्रस्तुत करना</button>
</form>
यदि आप फॉर्म जमा करते हैं और इनपुट का मान पूरे रेगेक्स से मेल नहीं खाता है, तो फॉर्म एक डिफ़ॉल्ट त्रुटि प्रदर्शित करेगा जो इस तरह दिखती है:
यदि पैटर्न विशेषता को दिया गया रेगुलर एक्सप्रेशन अमान्य है, तो ब्राउज़र विशेषता को अनदेखा कर देगा।
फॉर्म सत्यापन के लिए सामान्य रेगेक्स पैटर्न
स्क्रैच से रेगेक्स बनाने और डीबग करने में कुछ समय लग सकता है। यहां कुछ रेगेक्स स्टेटमेंट दिए गए हैं जिनका उपयोग आप कुछ सबसे सामान्य प्रकार के फॉर्म डेटा को मान्य करने के लिए कर सकते हैं।
स्ट्रिंग लंबाई मान्य करने के लिए नियमित अभिव्यक्ति
सबसे आम सत्यापन आवश्यकताओं में से एक स्ट्रिंग की लंबाई पर प्रतिबंध है। सात-वर्ण वाली स्ट्रिंग से मेल खाने वाला रेगुलर एक्सप्रेशन है:
/^.{7}$/
"।" एक प्लेसहोल्डर है जो किसी भी वर्ण से मेल खाता है, और घुंघराले कोष्ठक में "7" स्ट्रिंग की लंबाई सीमा निर्दिष्ट करता है। यदि स्ट्रिंग को लंबाई की एक निश्चित सीमा के भीतर होना चाहिए, जैसे कि तीन और सात के बीच, तो रेगुलर एक्सप्रेशन इसके बजाय इस तरह दिखेगा:
/^.{3,7}$/
और अगर स्ट्रिंग को बिना किसी ऊपरी सीमा के कम से कम तीन वर्ण लंबा होना चाहिए, तो यह इस तरह दिखेगा:
/^.{3,}$/
यह संभावना नहीं है कि फॉर्म इनपुट के लिए लंबाई ही एकमात्र सत्यापन आवश्यकता होगी। लेकिन आप अक्सर इसे अन्य स्थितियों सहित अधिक जटिल नियमित अभिव्यक्ति के भाग के रूप में उपयोग करेंगे।
पत्र-केवल फ़ील्ड को मान्य करने के लिए नियमित अभिव्यक्ति
कुछ फॉर्म इनपुट में मान्य होने के लिए अक्षरों के अलावा कुछ भी नहीं होना चाहिए। निम्नलिखित रेगुलर एक्सप्रेशन केवल ऐसे तार से मेल खाएगा:
/^[a-zA-Z]+$/
यह रेगुलर एक्सप्रेशन संपूर्ण वर्णमाला से बने वर्ण सेट को निर्दिष्ट करता है। विशेष वर्ण "+" का अर्थ है कि पिछला वर्ण कम से कम एक बार होना चाहिए, जिसकी कोई ऊपरी सीमा नहीं है।
संख्या-केवल फ़ील्ड को मान्य करने के लिए नियमित अभिव्यक्ति
निम्नलिखित रेगुलर एक्सप्रेशन केवल पूरी तरह से अंकों से बने स्ट्रिंग्स से मेल खाएगा:
/^\d+$/
उपरोक्त नियमित अभिव्यक्ति अनिवार्य रूप से पिछले वाले के समान ही है। अंतर केवल इतना है कि यह अंकों की श्रेणी का प्रतिनिधित्व करने के लिए उन्हें लिखने के बजाय एक विशेष वर्ण "\d" का उपयोग करता है।
अल्फ़ान्यूमेरिक फ़ील्ड को मान्य करने के लिए नियमित अभिव्यक्ति
रेगुलर एक्सप्रेशन से अल्फ़ान्यूमेरिक फ़ील्ड को भी सत्यापित करना आसान हो जाता है। यहां एक रेगुलर एक्सप्रेशन दिया गया है जो केवल अक्षरों और अंकों से बनी स्ट्रिंग्स से मेल खाएगा:
/^[a-zA-Z\d]+$/
कुछ फ़ील्ड अल्फ़ान्यूमेरिक हैं, लेकिन कुछ अन्य वर्णों जैसे हाइफ़न और अंडरस्कोर की अनुमति देते हैं। ऐसे क्षेत्रों का एक उदाहरण उपयोगकर्ता नाम है। नीचे एक रेगुलर एक्सप्रेशन है जो अक्षरों, अंकों, अंडरस्कोर और हाइफ़न से बनी स्ट्रिंग से मेल खाता है:
/^(\w|-)+$/
विशेष वर्ण "\w" वर्णों के पूरे वर्ग से मेल खाता है, जैसे "\d" करता है। यह वर्णमाला, अंकों और अंडरस्कोर वर्ण ("_") की सीमा का प्रतिनिधित्व करता है।
फ़ोन नंबर सत्यापित करने के लिए नियमित अभिव्यक्ति
एक फ़ोन नंबर मान्य करने के लिए एक जटिल क्षेत्र हो सकता है क्योंकि विभिन्न देश विभिन्न स्वरूपों का उपयोग करते हैं। एक बहुत ही सामान्य तरीका यह सुनिश्चित करना है कि स्ट्रिंग में केवल अंक हों और इसकी लंबाई एक निश्चित सीमा के भीतर हो:
/^\d{9,15}$/
एक अधिक परिष्कृत दृष्टिकोण इस तरह दिख सकता है. से लिया गया एमडीएन, जो ###-###-#### प्रारूप में फ़ोन नंबरों की पुष्टि करता है:
/^(?:\d{3}|\(\d{3}\))([-\/\.])\d{3}\1\d{4}$/
तिथियों को मान्य करने के लिए नियमित अभिव्यक्ति
फ़ोन नंबरों की तरह, तिथियों के भी कई प्रारूप हो सकते हैं। तिथियां आमतौर पर फ़ोन नंबरों की तुलना में मान्य करने के लिए कम जटिल होती हैं। क्यों? तिथियों में अंक और हाइफ़न के अलावा कोई वर्ण नहीं है।
यहां एक उदाहरण दिया गया है जो "DD-MM-YYYY" प्रारूप की तिथियों को मान्य करेगा।
/^\d{2}-\d{2}-\d{4}$/
रेगेक्स के साथ सत्यापन करना आसान है
रेगुलर एक्सप्रेशन ऐसे पैटर्न का वर्णन करते हैं जो स्ट्रिंग्स में वर्णों के संयोजन से मेल खाते हैं। उनके पास विभिन्न प्रकार के अनुप्रयोग हैं, जैसे HTML प्रपत्रों से उपयोगकर्ता इनपुट को मान्य करना।
आप जावास्क्रिप्ट के साथ या HTML पैटर्न विशेषता के माध्यम से मान्य करने के लिए रेगेक्स का उपयोग कर सकते हैं। दिनांक और उपयोगकर्ता नाम जैसे सामान्य प्रकार के फ़ॉर्म इनपुट को मान्य करने के लिए नियमित अभिव्यक्ति बनाना आसान है।