मुझे पता है कि यह एक पुरानी पोस्ट का एक सा है, लेकिन यहां सभी नियमित अभिव्यक्तियाँ एक बहुत महत्वपूर्ण घटक को याद कर रही हैं: IDNI नामों का समर्थन।
IDN डोमेन नाम xn-- से शुरू होते हैं। वे डोमेन नाम में विस्तारित UTF-8 वर्ण सक्षम करते हैं। उदाहरण के लिए, क्या आप जानते हैं कि "com .com" एक मान्य डोमेन नाम है? हाँ, "लव हार्ट डॉट कॉम"! डोमेन नाम को मान्य करने के लिए, आपको http://xn--c6h.com/ सत्यापन पास करने की आवश्यकता है ।
ध्यान दें, इस रेगेक्स का उपयोग करने के लिए, आपको डोमेन को लोअर केस में बदलने की आवश्यकता होगी, और यह सुनिश्चित करने के लिए कि आप ACE को डोमेन नामों को एनकोड करने के लिए एक IDN लाइब्रेरी का भी उपयोग करें (जिसे "ASCII कम्पेटिबल एन्कोडिंग" भी कहा जाता है)। एक अच्छी लाइब्रेरी GNU-Libidn है।
idn (1) अंतर्राष्ट्रीय डोमेन नाम पुस्तकालय के लिए कमांड लाइन इंटरफ़ेस है। निम्न उदाहरण UTF-8 में होस्ट नाम को ACE एन्कोडिंग में परिवर्तित करता है। परिणामी URL https: //nic.xn--flw351e/ तब ACE- एन्कोडेड के बराबर https: // nic। Of // / के रूप में उपयोग किया जा सकता है ।
$ idn --quiet -a nic.谷歌
nic.xn--flw351e
इस जादू की नियमित अभिव्यक्ति को अधिकांश डोमेन को कवर करना चाहिए (हालांकि, मुझे यकीन है कि कई वैध किनारे मामले हैं जो मुझे याद हैं)
^((?!-))(xn--)?[a-z0-9][a-z0-9-_]{0,61}[a-z0-9]{0,1}\.(xn--)?([a-z0-9\-]{1,61}|[a-z0-9-]{1,30}\.[a-z]{2,})$
एक डोमेन सत्यापन रेगेक्स चुनते समय, आपको यह देखना चाहिए कि क्या डोमेन निम्नलिखित से मेल खाता है:
- xn--stackoverflow.com
- stackoverflow.xn - कॉम
- stackoverflow.co.uk
यदि ये तीन डोमेन पास नहीं होते हैं, तो आपकी नियमित अभिव्यक्ति वैध डोमेन की अनुमति नहीं दे सकती है!
की जाँच करें Oracle की अंतर्राष्ट्रीय भाषा पर्यावरण गाइड से अंतर्राष्ट्रीय डोमेन नाम समर्थन पृष्ठ अधिक जानकारी के लिए।
यहाँ रेगेक्स आज़माने के लिए स्वतंत्र महसूस करें: http://www.regexr.com/3abjr
आईसीएएनएन उन प्रतिनिधियों की सूची रखता है, जिनका उपयोग आईडीएन डोमेन के कुछ उदाहरणों को देखने के लिए किया जा सकता है।
संपादित करें:
^(((?!-))(xn--|_{1,1})?[a-z0-9-]{0,61}[a-z0-9]{1,1}\.)*(xn--)?([a-z0-9][a-z0-9\-]{0,60}|[a-z0-9-]{1,30}\.[a-z]{2,})$
यह नियमित अभिव्यक्ति एक होस्टनाम के अंत में '-' वाले डोमेन को वैध होने के रूप में चिह्नित करेगी। इसके अतिरिक्त, यह असीमित उप-डोमेन की अनुमति देता है।