क्या सही FQDN दर्ज किया गया है, तो सत्यापित करने के लिए एक त्वरित और गंदा तरीका है? ध्यान रखें कि कोई DNS सर्वर या इंटरनेट कनेक्शन नहीं है, इसलिए regex/awk/sed के माध्यम से सत्यापन किया जाना है।पूरी तरह से योग्य डोमेन नाम सत्यापन
कोई विचार?
क्या सही FQDN दर्ज किया गया है, तो सत्यापित करने के लिए एक त्वरित और गंदा तरीका है? ध्यान रखें कि कोई DNS सर्वर या इंटरनेट कनेक्शन नहीं है, इसलिए regex/awk/sed के माध्यम से सत्यापन किया जाना है।पूरी तरह से योग्य डोमेन नाम सत्यापन
कोई विचार?
अब यह कठिन है, अंतर्राष्ट्रीय डोमेन नाम और कई हजार (!) नई TLD के साथ क्या।
आसान हिस्सा यह है कि आप अभी भी घटकों को "।" पर विभाजित कर सकते हैं।
आपको पंजीकरण योग्य टीएलडी की एक सूची की आवश्यकता है। उस के लिए एक साइट है:
https://publicsuffix.org/list/effective_tld_names.dat
आप केवल आईसीएएनएन मान्यता प्राप्त लोगों की जांच की जरूरत है। ध्यान दें कि एक पंजीकृत टीएलडी में एक से अधिक घटक हो सकते हैं, जैसे कि "co.uk"।
फिर आईडीएन और पन्योडोड है। डोमेन अब यूनिकोड हैं। उदाहरण के लिए,
"xn - nnx388a" "臺灣" के बराबर है। वे दोनों संयोग से वैध टीएलडी हैं।
पनीकोड रूपांतरण कोड के लिए, "http://golang.org/src/pkg/net/http/cookiejar/punycode.go" देखें।
प्रत्येक डोमेन घटक के सिंटैक्स की जांच करने के नए नियम भी हैं। http://tools.ietf.org/html/rfc5890
पर RFC5890 देखें घटक या तो ए-लेबल्स (केवल ASCII) या यूनिकोड हो सकते हैं। ASCII लेबल या तो पुराने वाक्यविन्यास का पालन करते हैं, या "xn--" शुरू करते हैं, इस मामले में वे यूनिकोड स्ट्रिंग के एक पन्योड संस्करण हैं।
यूनिकोड के नियम बहुत जटिल हैं, और आरएफसी 58 9 0 में दिए गए हैं। नियमों को बाएं से दाएं और दाएं से बाएं सेट से वर्णों को मिश्रित करने जैसी चीजों को रोकने के लिए डिज़ाइन किया गया है।
क्षमा करें कोई आसान जवाब नहीं है।
इस regex तुम क्या चाहते है:
(?=^.{1,254}$)(^(?:(?!\d+\.)[a-zA-Z0-9_\-]{1,63}\.?)+(?:[a-zA-Z]{2,})$)
यह अपने उदाहरण डोमेन से मेल (groupa-zone1appserver.example.com या cod.eu आदि ...)
मैं समझाने की कोशिश करता हूँ :
(?=^.{1,254}$)
डोमेन नाम (जो किसी भी चार से शुरू हो सकता है) से मेल खाता है जो कि 1 और 254 चार के बीच लंबा होता है, तो यह भी 5,254 हो सकता है यदि हम मानते हैं कि co.uk न्यूनतम लंबाई है।
(^
शुरू कर मैच
(?:
उससे मिलते-जुलते समूह
(?!\d+\.)
डोमेन नाम, संख्या द्वारा रचित नहीं किया जाना चाहिए ताकि 1234.co.uk या abc.123.uk जबकि 1 क स्वीकार नहीं कर रहे परिभाषित करते हैं। ko.uk हाँ।
[a-zA-Z0-9_\-]
डोमेन नाम केवल a-zA-Z0-9_-
{1,63}
किसी भी डोमेन स्तर की लंबाई के साथ शब्दों द्वारा रचित किया जाना चाहिए अधिकतम 63 वर्ण है, (यह हो सकता है 2,63)
+
और
(?:[a-zA-Z]{2,})$)
डोमेन नाम के अंतिम भाग किसी अन्य शब्द के बाद नहीं किया जाना चाहिए और एक-zA-Z
क्या आप नोटेशन की व्याख्या करना चाहते हैं? 'Ac.uk' के साथ क्या करता है? यह वैध एफक्यूडीएन नहीं है; यह देश-कोड टीएलडी के तहत एक मध्य-स्तर का डोमेन है। उदाहरण के लिए –
aa.com एक fqdn है यह regex केवल तारों से मेल खाता है जो डॉट्स द्वारा विभाजित हैं और अंतिम स्ट्रिंग न्यूनतम 2 char है। – tombolinux
एक रेगेक्स के साथ आप केवल एक वाक्यविन्यास से मेल खा सकते हैं, वास्तविक डीएनएस fqdn नहीं। – tombolinux
रेगेक्स हमेशा इस तरह की चीजों के लिए अनुमान लगाया जा रहा है, और नियम समय के साथ बदलते हैं। ऊपर regex मन में निम्नलिखित के साथ लिखा गया था और होस्ट नामों के लिए विशिष्ट है -
होस्ट का नाम डॉट्स के साथ concatenated लेबल की एक श्रृंखला से बना रहे हैं। प्रत्येक लेबल 1 से 63 वर्ण लंबा है, और हो सकता है:
इसके अतिरिक्त:
कुछ मान्यताओं:
परिणामों के ऊपर कम से कम 1 का स्तर: मान्य/अमान्य
संपादित करें:
: जॉन Rix एक टीएलडी वैकल्पिक के विनिर्देश बनाने के लिए regex का एक वैकल्पिक हैक प्रदान की(?=^.{1,253}$)(^(((?!-)[a-zA-Z0-9-]{1,63}(?<!-))|((?!-)[a-zA-Z0-9-]{1,63}(?<!-)\.)+[a-zA-Z]{2,63})$)
संपादित करें 2: किसी एक संस्करण है कि जे एस में काम करता है के लिए कहा। जेएस में काम नहीं करने का कारण यह है क्योंकि जेएस रेगेक्स लुक का समर्थन नहीं करता है। विशेष रूप से, कोड (?<!-)
- जो निर्दिष्ट करता है कि पिछले वर्ण एक हाइफ़न नहीं हो सकता है। एक छोटे से भद्दा लेकिन बहुत ज्यादा नहीं
(?=^.{4,253}$)(^((?!-)[a-zA-Z0-9-]{0,62}[a-zA-Z0-9]\.)+[a-zA-Z]{2,63}$)
आप वैसे ही जॉन Rix के संस्करण पर एक समान प्रतिस्थापन कर सकता है -
वैसे भी, यहाँ यह lookbehind बिना फिर से लिखा गया है।
संपादित करें 3: आप डॉट्स अनुगामी अनुमति देना चाहते हैं - जो तकनीकी रूप से अनुमति दी है:
(?=^.{4,253}$)(^((?!-)[a-zA-Z0-9-]{1,63}(?<!-)\.)+[a-zA-Z]{2,63}\.?$)
मैं जब तक @ChaimKut उन्हें बताया डॉट वाक्य रचना अनुगामी से परिचित नहीं था और मैं कुछ शोध किया
पीछे के बिंदुओं का उपयोग करना, हालांकि मैंने खेले गए विभिन्न उपकरणों में कुछ हद तक अप्रत्याशित परिणाम पैदा किए हैं, इसलिए मुझे कुछ सावधानी बरतनी होगी।
से मेल नहीं खाता है यहां एक (कुछ हद तक हैकी) वैकल्पिक संस्करण है जो संबद्ध डोमेन के बिना होस्टनाम को मान्य करेगा। कोई सुधार? '(? =^{} $ 1,254।) (^ (((-) [एक-zA-Z0-9 -] {1,63} (<-)) |?!?!?! ((-) [ ए-जेए-जेड 0-9 -] {1,63} (?
@ जॉन रिक: आपका रेगेक्स ऐसा दिखता है काम करता है लेकिन कई लोगों को प्रतिलिपि/पेस्ट करने से यह असफल हो जाएगा क्योंकि स्टैक एक्सचेंज अदृश्य वर्णों को प्रारूपण उद्देश्यों के लिए टिप्पणियों के एचटीएमएल स्रोत में डालता है- HTML स्रोत को देखें और http://meta.stackexchange.com/questions/170970/occasionally- द यूनिकोड-कैरेक्टर-अनुक्रम-u200c-u200b-zwnj-zwsp-is-insert – bkr
धन्यवाद @bkr, इसके बारे में पता नहीं था। ऐसा कोई समाधान नहीं है, लेकिन कम से कम आपने इस जाल को यहां अनियमित के लिए उजागर किया है! –
विचाराधीन # 1:
कृपया ध्यान दें कि RFC-2181 डीएनएस लेबल में आराम आवश्यकताओं के कारण प्रतीकों (हालांकि, लंबाई प्रतिबंध अभी भी देखते हैं) की काफी किसी भी संयोजन से मिलकर कर सकते हैं:
" किसी भी बाइनरी स्ट्रिंग को किसी भी संसाधन रिकॉर्ड के लेबल के रूप में इस्तेमाल किया जा सकता है। DNS प्रोटोकॉल के कार्यान्वयन को लेबल पर किसी भी प्रतिबंध को नहीं रखना चाहिए। विशेष रूप से, DNS सर्वर को ज़ोन की सेवा करने से इंकार नहीं करना चाहिए क्योंकि इसमें लेबल हैं हो सकता है कि कुछ DNS क्लाइंट प्रोग्राम्स को स्वीकार्य न हो। "(https://tools.ietf.org/html/rfc2181#section-11)
विचाराधीन # 2:
" एक अतिरिक्त नियम है कि अनिवार्य रूप से की आवश्यकता है कि शीर्ष स्तर के डोमेन नामों सभी संख्यात्मक " (https://tools.ietf.org/html/rfc3696#section-2)
ध्यान में रखते हुए नहीं हो इन दो कारणों से, सही regex इस तरह दिखता है:
/^(?!:\/\/)(?=.{1,255}$)((.{1,63}\.){1,127}(?![0-9]*$)[a-z0-9-]+\.?)$/i
डेमो @http://regexr.com/3g5j0
वास्तव में नहीं .. कम से कम, यह विश्वसनीय नहीं होगा। आप यह जांच सकते हैं कि टीएलडी भाग आपके स्वयं के टीएलडी की सूची रखकर वैध है (जिसे अद्यतित रखा जाना चाहिए) लेकिन इसके अलावा मुझे लगता है कि आप भाग्य से बाहर हैं :) – favoretti
इसे आज़माएं, यह एक रेगेक्स है : http://stackoverflow.com/questions/4912520/validate-fqdn-in-c-sharp – tombolinux
अच्छी तरह से मेरा विचार यह सत्यापित करना था कि उपयोगकर्ता ने वैध डीएनएस नाम दर्ज किया है जैसे groupa-zone1appserver.example.com एक मानक। – Riaan