जवाबों:
आप निम्नलिखित नियमित अभिव्यक्तियों को अलग-अलग या संयुक्त या अभिव्यक्ति में जोड़कर उपयोग कर सकते हैं।
ValidIpAddressRegex = "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$";
ValidHostnameRegex = "^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$";
ValidIpAddressRegex मान्य IP पते और ValidHostnameRegex मान्य होस्ट नामों से मेल खाता है । आपके द्वारा उपयोग की जाने वाली भाषा के आधार पर \ _ के साथ भाग जाना पड़ सकता है।
ValidHostnameRegex RFC 1123 के अनुसार मान्य है । मूल रूप से, RFC 952 ने निर्दिष्ट किया कि hostname सेगमेंट एक अंक से शुरू नहीं हो सकता है।
http://en.wikipedia.org/wiki/Hostname
RFC 952 में होस्टनामों का मूल विनिर्देश , यह अनिवार्य है कि लेबल एक अंक या एक हाइफ़न के साथ शुरू नहीं कर सकते हैं, और एक हाइफ़न के साथ समाप्त नहीं होना चाहिए। हालाँकि, बाद के विनिर्देशन ( RFC 1123 ) ने होस्टनाम लेबल को अंकों के साथ शुरू करने की अनुमति दी।
Valid952HostnameRegex = "^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$";
éxämplè.com
= xn--xmpl-loa1ab.com
) और फिर मान्य किया गया।
123.456.789.0
और यह कहता है कि यह एक मान्य होस्टनाम है।
स्मिंक के होस्टनाम रेगेक्स एक होस्टनाम के भीतर व्यक्तिगत लेबल की लंबाई पर सीमा का निरीक्षण नहीं करता है। एक मान्य होस्टनाम के भीतर प्रत्येक लेबल 63 ओकटेट्स से अधिक लंबा नहीं हो सकता है।
ValidHostnameRegex = "^ ([एक-zA-Z0-9] | [एक-zA-Z0-9] [एक-zA-Z0-9 \ -] {0,61} [एक-zA-Z0-9]) \ (\ ([एक-zA-Z0-9] |। [एक-zA-Z0-9] [एक-zA-Z0-9 \ -] {0,61} [एक-zA-Z0-9])) * $ "
ध्यान दें कि पहली पंक्ति के अंत में (ऊपर) बैकस्लैश लंबी लाइन को विभाजित करने के लिए यूनिक्स शेल सिंटैक्स है। यह स्वयं नियमित अभिव्यक्ति का हिस्सा नहीं है।
यहाँ एक लाइन पर केवल नियमित अभिव्यक्ति है:
^ ([एक-zA-Z0-9] | [एक-zA-Z0-9] [एक-zA-Z0-9 \ -] {0,61} [एक-zA-Z0-9]) (\। ([एक-zA-Z0-9] | [एक-zA-Z0-9] [एक-zA-Z0-9 \ -] {0,61} [एक-zA-Z0-9])) * $
आपको अलग से यह भी जांचना चाहिए कि होस्टनाम की कुल लंबाई 255 वर्णों से अधिक नहीं होनी चाहिए । अधिक जानकारी के लिए, कृपया RFC-952 और RFC-1123 से परामर्श करें।
/^[a-z\d]([a-z\d\-]{0,61}[a-z\d])?(\.[a-z\d]([a-z\d\-]{0,61}[a-z\d])?)*$/i
मान्य IP पते से मिलान करने के लिए निम्नलिखित regex का उपयोग करें:
(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}
के बजाय:
([01]?[0-9][0-9]?|2[0-4][0-9]|25[0-5])(\.([01]?[0-9][0-9]?|2[0-4][0-9]|25[0-5])){3}
कई रेगेक्स इंजन OR
अनुक्रम में पहली संभावना से मेल खाते हैं । उदाहरण के लिए, निम्न regex का प्रयास करें:
10.48.0.200
([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])(\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9]))*
बनाम([a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9]|[a-zA-Z0-9])(\.([a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])|[a-zA-Z0-9]))*
+
बजाय अंत में उपयोग करें *
।
मुझे लगता है कि मैं शीर्ष पोस्ट को संपादित करने में सक्षम नहीं हूं, इसलिए मैं यहां अपना उत्तर दूंगा।
Hostname के लिए - आसान जवाब, egrep उदाहरण पर यहाँ - http: //www.linuxinsight.com/how_to_grep_for_ip_addresses_using_the_gnu_egrep_utility.html
egrep '([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}'
हालांकि मामला मुट्ठी ओक्टेट में 0 जैसे मूल्यों के लिए जिम्मेदार नहीं है, और 254 (आईपी एडरेस) या 255 (नेटमास्क) से अधिक मूल्य है। शायद एक अतिरिक्त अगर बयान में मदद मिलेगी।
जैसा कि कानूनी डीएनएस होस्टनाम के लिए है, बशर्ते कि आप केवल इंटरनेट होस्टनाम के लिए जाँच कर रहे हैं (और इंट्रानेट नहीं), मैंने निम्नलिखित स्निप, शेल / पीएचपी का मिश्रण लिखा है लेकिन यह किसी भी नियमित अभिव्यक्ति के रूप में लागू होना चाहिए।
पहले ietf वेबसाइट पर जाएं, कानूनी स्तर 1 डोमेन नामों की सूची डाउनलोड करें और पार्स करें:
tld=$(curl -s http://data.iana.org/TLD/tlds-alpha-by-domain.txt | sed 1d | cut -f1 -d'-' | tr '\n' '|' | sed 's/\(.*\)./\1/')
echo "($tld)"
आपको आपको एक अच्छा कोड देना चाहिए जो कि टॉप डोमेन नाम की वैधानिकता के लिए जाँच करता है, जैसे .com .org या .ca
फिर यहां मिले दिशानिर्देशों के अनुसार अभिव्यक्ति का पहला भाग जोड़ें - http: //www.domainit.com/support/faq.mhtml?category=Domain_FAQ&question=9 (कोई भी अल्फ़ान्यूमेरिक संयोजन और '-' प्रतीक, डैश में नहीं होना चाहिए एक ओकटेट की शुरुआत या अंत।
(([a-z0-9]+|([a-z0-9]+[-]+[a-z0-9]+))[.])+
फिर इसे एक साथ रखें (PHP preg_match उदाहरण):
$pattern = '/^(([a-z0-9]+|([a-z0-9]+[-]+[a-z0-9]+))[.])+(AC|AD|AE|AERO|AF|AG|AI|AL|AM|AN|AO|AQ|AR|ARPA|AS|ASIA|AT|AU|AW|AX|AZ|BA|BB|BD|BE|BF|BG|BH|BI|BIZ|BJ|BM|BN|BO|BR|BS|BT|BV|BW|BY|BZ|CA|CAT|CC|CD|CF|CG|CH|CI|CK|CL|CM|CN|CO|COM|COOP|CR|CU|CV|CX|CY|CZ|DE|DJ|DK|DM|DO|DZ|EC|EDU|EE|EG|ER|ES|ET|EU|FI|FJ|FK|FM|FO|FR|GA|GB|GD|GE|GF|GG|GH|GI|GL|GM|GN|GOV|GP|GQ|GR|GS|GT|GU|GW|GY|HK|HM|HN|HR|HT|HU|ID|IE|IL|IM|IN|INFO|INT|IO|IQ|IR|IS|IT|JE|JM|JO|JOBS|JP|KE|KG|KH|KI|KM|KN|KP|KR|KW|KY|KZ|LA|LB|LC|LI|LK|LR|LS|LT|LU|LV|LY|MA|MC|MD|ME|MG|MH|MIL|MK|ML|MM|MN|MO|MOBI|MP|MQ|MR|MS|MT|MU|MUSEUM|MV|MW|MX|MY|MZ|NA|NAME|NC|NE|NET|NF|NG|NI|NL|NO|NP|NR|NU|NZ|OM|ORG|PA|PE|PF|PG|PH|PK|PL|PM|PN|PR|PRO|PS|PT|PW|PY|QA|RE|RO|RS|RU|RW|SA|SB|SC|SD|SE|SG|SH|SI|SJ|SK|SL|SM|SN|SO|SR|ST|SU|SV|SY|SZ|TC|TD|TEL|TF|TG|TH|TJ|TK|TL|TM|TN|TO|TP|TR|TRAVEL|TT|TV|TW|TZ|UA|UG|UK|US|UY|UZ|VA|VC|VE|VG|VI|VN|VU|WF|WS|XN|XN|XN|XN|XN|XN|XN|XN|XN|XN|XN|YE|YT|YU|ZA|ZM|ZW)[.]?$/i';
if (preg_match, $pattern, $matching_string){
... do stuff
}
आप उस स्ट्रिंग को जाँचने के लिए एक स्टेटमेंट जोड़ना चाह सकते हैं, जिसे आप चेक कर रहे हैं जो 256 अक्षरों से छोटा है - http://www.ops.ietf.org/lists/ameroppers/ameroppers.2003/msg00964.html
यह ध्यान देने योग्य है कि अधिकांश भाषाओं के लिए पुस्तकालय हैं जो आपके लिए ऐसा करते हैं, अक्सर मानक पुस्तकालय में बनाया जाता है। और उन पुस्तकालयों को कोड की तुलना में बहुत अधिक बार अपडेट होने की संभावना है जिसे आपने चार साल पहले एक स्टैक ओवरफ्लो उत्तर से कॉपी किया था और भूल गए थे। और निश्चित रूप से वे आम तौर पर पते को कुछ प्रयोग करने योग्य रूप में बदल देंगे, बजाय इसके कि आप केवल समूहों के समूह के साथ एक मैच दें।
उदाहरण के लिए, (POSIX) C में IPv4 का पता लगाना और पार्स करना:
#include <arpa/inet.h>
#include <stdio.h>
int main(int argc, char *argv[]) {
for (int i=1; i!=argc; ++i) {
struct in_addr addr = {0};
printf("%s: ", argv[i]);
if (inet_pton(AF_INET, argv[i], &addr) != 1)
printf("invalid\n");
else
printf("%u\n", addr.s_addr);
}
return 0;
}
जाहिर है, अगर आप कोशिश कर रहे हैं, तो इस तरह के कार्य नहीं होंगे, जैसे, चैट संदेश में सभी मान्य पते ढूंढें - लेकिन वहां भी, संभावित मैचों को खोजने के लिए एक सरल लेकिन अति उत्साही रेक्सक्स का उपयोग करना आसान हो सकता है, और फिर उपयोग कर सकते हैं। उन्हें पार्स करने के लिए पुस्तकालय।
उदाहरण के लिए, पायथन में:
>>> import ipaddress
>>> import re
>>> msg = "My address is 192.168.0.42; 192.168.0.420 is not an address"
>>> for maybeip in re.findall(r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}', msg):
... try:
... print(ipaddress.ip_address(maybeip))
... except ValueError:
... pass
def isValidHostname(hostname):
if len(hostname) > 255:
return False
if hostname[-1:] == ".":
hostname = hostname[:-1] # strip exactly one dot from the right,
# if present
allowed = re.compile("(?!-)[A-Z\d-]{1,63}(?<!-)$", re.IGNORECASE)
return all(allowed.match(x) for x in hostname.split("."))
मुझे लगता है कि यह सबसे अच्छा आईपी सत्यापन रेगेक्स है। कृपया इसे एक बार जांच लें !!!
^(([01]?[0-9]?[0-9]|2([0-4][0-9]|5[0-5]))\.){3}([01]?[0-9]?[0-9]|2([0-4][0-9]|5[0-5]))$
/^(?:[a-zA-Z0-9]+|[a-zA-Z0-9][-a-zA-Z0-9]+[a-zA-Z0-9])(?:\.[a-zA-Z0-9]+|[a-zA-Z0-9][-a-zA-Z0-9]+[a-zA-Z0-9])?$/
यहाँ एक regex है जो मैंने Ant में इस्तेमाल किया था एक प्रॉक्सी होस्ट IP या ANT_OPTS से होस्टनाम होस्ट करने के लिए। इसका उपयोग प्रॉक्सी आईपी प्राप्त करने के लिए किया गया था ताकि मैं कांटे वाले JVM के लिए प्रॉक्सी कॉन्फ़िगर करने से पहले एक चींटी "पहुंच योग्य" परीक्षण चला सकूं।
^.*-Dhttp\.proxyHost=(\w{1,}\.\w{1,}\.\w{1,}\.*\w{0,})\s.*$
\w
वहीं है, यह आईपी पर कब्जा नहीं करेगा, केवल कुछ परिस्थितियों में होस्टनाम।
मुझे यह आईपी पते के लिए बहुत अच्छा काम करता है। यह शीर्ष उत्तर की तरह मान्य है, लेकिन यह भी सुनिश्चित करता है कि आईपी अलग-थलग है इसलिए कोई पाठ या अधिक संख्या / दशमलव आईपी के बाद या उससे पहले नहीं है।
(?! <\ एस)? (: (: \ घ | [1-9] \ घ | 1 \ घ \ घ | 2 [0-4] \ घ | 25 [0-5]) \ ख |। \ ख) {7} (?! \ एस)
AddressRegex = "^(ftp|http|https):\/\/([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}:[0-9]{1,5})$";
HostnameRegex = /^(ftp|http|https):\/\/([a-z0-9]+\.)?[a-z0-9][a-z0-9-]*((\.[a-z]{2,6})|(\.[a-z]{2,6})(\.[a-z]{2,6}))$/i
यह पुनः इस प्रकार के सत्यापन के लिए उपयोग किया जाता है
अगर केवल http://www.kk.com http://www.kk.co.in
के लिए काम नहीं करता है
आईपी पते के बारे में, ऐसा प्रतीत होता है कि अग्रणी शून्य को शामिल करने के लिए कुछ बहस है। यह एक बार आम प्रथा थी और इसे आमतौर पर स्वीकार किया जाता है, इसलिए मैं यह तर्क दूंगा कि उन्हें वर्तमान वरीयता की परवाह किए बिना मान्य रूप में चिह्नित किया जाना चाहिए । इस बात पर भी कुछ अस्पष्टता है कि क्या स्ट्रिंग से पहले और बाद के पाठ को मान्य किया जाना चाहिए और, फिर से, मुझे लगता है कि यह होना चाहिए। 1.2.3.4 एक वैध आईपी है, लेकिन 1.2.3.4.5 नहीं है और न ही 1.2.3.4 भाग और न ही 2.3.4.5 भाग का मिलान होना चाहिए। कुछ चिंताओं को इस अभिव्यक्ति के साथ संभाला जा सकता है:
grep -E '(^|[^[:alnum:]+)(([0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])\.){3}([0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])([^[:alnum:]]|$)'
यहाँ दुर्भाग्यपूर्ण तथ्य यह है कि रेगेक्स भाग जो एक ओकटेट को मान्य करता है, दोहराया जाता है, जो कई प्रस्तावित समाधानों में सच है। यद्यपि यह पैटर्न के उदाहरणों के लिए बेहतर है, पुनरावृत्ति का इस्तेमाल होने पर सबटूटिन का समर्थन करने पर पुनरावृत्ति को पूरी तरह से समाप्त किया जा सकता है। अगला उदाहरण उन कार्यों को -P
स्विच के साथ सक्षम करता है grep
और लुकहेड और लुकबाइंड कार्यक्षमता का लाभ भी उठाता है। (मैंने जो फ़ंक्शन नाम चुना है, वह ओकटेट के लिए 'ओ' है। मैं नाम के रूप में 'ऑक्टेट' का उपयोग कर सकता था, लेकिन इसका छंद बनना चाहता था।)
grep -P '(?<![\d\w\.])(?<o>([0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5]))(\.\g<o>){3}(?![\d\w\.])'
डॉट का हैंडलिंग वास्तव में एक गलत नकारात्मक बना सकता है अगर आईपी पते वाक्यों के रूप में पाठ के साथ एक फ़ाइल में हैं क्योंकि एक अवधि बिंदीदार नोटेशन का हिस्सा होने के बिना एक अवधि का पालन कर सकती है। उपरोक्त का एक प्रकार यह तय करेगा कि:
grep -P '(?<![\d\w\.])(?<x>([0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5]))(\.\g<x>){3}(?!([\d\w]|\.\d))'
>>> my_hostname = "testhostn.ame"
>>> print bool(re.match("^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$", my_hostname))
True
>>> my_hostname = "testhostn....ame"
>>> print bool(re.match("^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$", my_hostname))
False
>>> my_hostname = "testhostn.A.ame"
>>> print bool(re.match("^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$", my_hostname))
True
नए नेटवर्क ढांचे में संरचित IPv4Address और संरचित IPv6Address के लिए प्रारंभिक आरम्भक हैं जो बहुत आसानी से IP पता भाग को संभालते हैं। IPv6 में regex के साथ ऐसा करना सभी छोटे नियमों के साथ कठिन है।
दुर्भाग्य से मैं hostname के लिए एक सुंदर जवाब नहीं है।
ध्यान दें कि नेटवर्क फ्रेमवर्क हाल ही में है, इसलिए यह आपको हाल के OS संस्करणों के लिए संकलन करने के लिए मजबूर कर सकता है।
import Network
let tests = ["192.168.4.4","fkjhwojfw","192.168.4.4.4","2620:3","2620::33"]
for test in tests {
if let _ = IPv4Address(test) {
debugPrint("\(test) is valid ipv4 address")
} else if let _ = IPv6Address(test) {
debugPrint("\(test) is valid ipv6 address")
} else {
debugPrint("\(test) is not a valid IP address")
}
}
output:
"192.168.4.4 is valid ipv4 address"
"fkjhwojfw is not a valid IP address"
"192.168.4.4.4 is not a valid IP address"
"2620:3 is not a valid IP address"
"2620::33 is valid ipv6 address"
php पर: filter_var(gethostbyname($dns), FILTER_VALIDATE_IP) == true ? 'ip' : 'not ip'
होस्ट नामों के लिए जाँच कर रहा है ... mywebsite.co.in, thangaraj.name, 18thangaraj.in, thangarajad.in, आदि।
[a-z\d+].*?\\.\w{2,4}$
inet_aton
काफी अच्छा है
मैंने IP पते के लिए इस सरल रेगेक्स मिलान पैटर्न के बारे में सोचा था जो \ d [[।] \ D + [।] \ D + [।] \ D + से मेल खाता है।
^\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}
और निश्चित रूप से यह सही तरीका नहीं होगा। यदि आपके पास स्क्रिप्ट लिखने के लिए एक समस्या है, तो सुनिश्चित करें कि आपके पास इसके नेटवर्क कार्यों तक पहुंच होगी। REAL IP को चेक करने का सबसे अच्छा तरीका यह है कि सिस्टम को कन्वर्ट करने के लिए और ip को सही फॉर्मेट में बताने के लिए इसे सही / गलत की जाँच करें। पायथन के मामले में मैं उपयोग करता हूं socket.inet_aton(ip)
। पीएचपी का मामला यू जरूरत inet_aton($ip)
।