2008-09-03 18 views
7

मैं कैसे निर्धारित कर सकता हूं कि कोई स्ट्रिंग आईपी पता है या नहीं? या तो आईपीवी 4 या आईपीवी 6?आईपी का मूल्यांकन कैसे करें?

कम से कम और अधिकतर वर्णों की संख्या क्या है?

मुझे लगता है कि यह regex उत्तर होगा।

उत्तर

3

लेकिन सवाल a.b.c.d मानने के समान आसान नहीं है ... there are way more forms than you realised

लेकिन निश्चित रूप से यह इस प्रश्न के लिए एक Google है? बहुत अधिक प्रत्येक regex प्राइमर आप कहीं भी आईपी का उदाहरण उदाहरण के रूप में उपयोग कर सकते हैं! ipv4 + regex स्कोर 183,000 हिट!

+0

लेकिन चूंकि आपने जो लिंक प्रदान किया है वह एक अच्छा लेख है, मैंने इसे सही उत्तर के रूप में चुना है। ;) – pek

4

आईपीवी 4 के लिए आप इस नियमित अभिव्यक्ति का उपयोग कर सकते हैं।

\b(?:(?: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]?)\b 

यह काफी जटिल दिखता है लेकिन यह प्रत्येक क्वाड को संख्या 0-255 तक सीमित करके काम करता है।

0

चूंकि उस रेगेक्स का आधा इस तथ्य को संभालता है कि अंतिम खंड में अंत में कोई अवधि नहीं है, तो आप इसे 'आधा' आपके संभावित आईपी पते के अंत तक।

कुछ इस तरह:

bool IsValidIPAddress(string possibleIP){ 
    CrazyRegex = \b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){4}\b 
    return Regex.Match(possibleIP+'.', CrazyRegex) 
} 
0

@unsliced: सच है, इस समस्या को एक छोटे से पागल हो सकता है।

यदि आपको वास्तव में किसी भी संभावित आईपी पते को संभालने की आवश्यकता है तो आपको कुछ और परिष्कृत एक साथ रखना होगा।

हालांकि, यदि आप यह सुनिश्चित करने के लिए मूल सत्यापन करना चाहते हैं कि उपयोगकर्ता सही रूप से स्वरूपित डेटा दर्ज कर रहे हैं, तो मुझे लगता है कि उपर्युक्त नियमित अभिव्यक्तियों के साथ उन्हें a.b.c.d मॉडल पर प्रतिबंधित करना उचित है।

0

@unsliced ​​जो सही है, हालांकि यह निश्चित रूप से कार्यान्वयन पर निर्भर करेगा, यदि आप अपनी साइट पर आने वाले उपयोगकर्ता से आईपी पार्स कर रहे हैं तो आप regex का उपयोग करने के लिए ठीक हैं क्योंकि यह x.x.x.x प्रारूप में होना चाहिए।

IPv6 के लिए आप इस

[A-F0-9]{0,4}:[A-F0-9]{0,4}:[A-F0-9]{0,4}:[A-F0-9]{0,4}:[A-F0-9]{0,4}:[A-F0-9]{0,4}:[A-F0-9]{0,4}:[A-F0-9]{0,4} 

इस्तेमाल कर सकते हैं क्योंकि IPv6 के साथ यह और अधिक जटिल है, लेकिन यह सब कुछ पकड़ नहीं करता है, विकिपीडिया के अनुसार निम्न उदाहरण के सभी technicaly सही हैं लेकिन इसके बाद के संस्करण regex केवल पकड़ एक *

2001:0db8:0000:0000:0000:0000:1428:57ab* 
2001:0db8:0000:0000:0000::1428:57ab* 
2001:0db8:0:0:0:0:1428:57ab* 
2001:0db8:0:0::1428:57ab 
2001:0db8::1428:57ab 
2001:db8::1428:57ab 
6

नेट में वहाँ एक IPAddress प्रकार है जो एक आसान विधि TryParse है के साथ लोगों को।

उदाहरण:

if(System.Net.IPAddress.TryParse(PossibleIPAddress, validatedIPAddress)){ 
    //validatedIPAddress is good 
} 

// or more simply: 
bool IsValidIPAddress(string possibleIP){ 
    return System.Net.IPAddress.TryParse(PossibleIPAddress, null) 
} 
5

मैं ऐसा करने के बाद से पहले, लेकिन मैं पर रेमंड चेन के पोस्ट पसंद:

http://blogs.msdn.com/oldnewthing/archive/2006/05/22/603788.aspx

कहाँ वह मूल रूप से के लिए regexes का उपयोग कर क्या वे पर अच्छा कर रहे हैं की वकालत टोकन बाहर पार्सिंग। फिर परिणामों का मूल्यांकन करें।उसका उदाहरण:

function isDottedIPv4(s) 
{ 
var match = s.match(/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/); 
return match != null && 
     match[1] <= 255 && match[2] <= 255 && 
     match[3] <= 255 && match[4] <= 255; 
} 

ऐसा नहीं है कि देखो और grok क्या कर किया जाना चाहिए था करने के लिए बहुत आसान है।

+0

मैंने इसे विभिन्न इनपुट पर परीक्षण किया। बुलेट प्रूफ लगता है। –

-1

आईपीवी 4 हो जाता है: /\d\d?\d?.\d\d?\d?.\d\d?\d?.\d\d?\d?/

मैं आईपीवी 6 नियमों के बारे में यकीन नहीं है।

संबंधित मुद्दे