regex रचन आईपी ​​का मूल्यांकन कैसे करें?




रचनात्मक मूल्यांकन और योगात्मक (7)

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

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

मुझे लगता है यह एक regex जवाब होगा।


लेकिन सवाल abcd मानते हुए उतना ही आसान नहीं है ... आपके द्वारा एहसास हुआ जितना अधिक रूप हैं

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


आईपीवी 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 संख्या तक सीमित करके काम करता है


@unsliced: सच है, इस समस्या को थोड़ा पागल हो सकता है।

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

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


मैंने यह पहले किया है, लेकिन मुझे रेमंड चेन की पसंद पसंद है:

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;
}

यह देखना बहुत आसान है और यह क्या हो सकता है कि क्या करना चाहिए।


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

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}

हालांकि यह आईपीवी 6 के साथ सब कुछ नहीं पकड़ता है, यह अधिक जटिल है, विकिपीडिया के अनुसार निम्नलिखित सभी उदाहरण तकनीकी तौर पर सही हैं, लेकिन उपरोक्त 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

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

कुछ इस तरह:

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)
}

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

मुझे आईपीवी 6 नियमों के बारे में निश्चित नहीं है





validation