2010-02-27 8 views
9

Welcher Regex kann ich verwenden, um eine gültige IP-Adresse in Punkt-Dezimal-Notation darzustellen?Welcher Regex kann ich verwenden, um eine gültige IP-Adresse in Punkt-Dezimal-Notation darzustellen?

+2

+1 seine eine einfache und berechtigte Frage. –

+2

Kürzeste? '. *' :-) – molf

+0

Suche CPAN. Sie können Module wie [Data :: Validate :: IP] (http://search.cpan.org/~neely/Data-Validate-IP-0.10/lib/Data/Validate/IP.pm) für Ihre Verwendung finden – ghostdog74

Antwort

1

Für IPv4 in einer ABCD (dezimal) Format, als Einzeiler:

(?:(?:[01]?\d?\d?|2[0-4]\d|25[0-5])(?:\.|$)){4}

:

(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])

Wenn nichts auf der Linie der Adresse folgt, kann es zu gezogen werden

Viel Spaß.

+0

inet_aton behandelt in der Regel viel mehr Formate als nur "A.B.C.D", versuche "ping 10.4" oder "ping 0x0a.077.0.4" und schau was passiert. – gorilla

+2

... weshalb die Einschränkung "IPv4 in einem A.B.C.D (Dezimal) -Format" für diejenigen, die tatsächlich lesen wollen, eindeutig angegeben ist. :) – vladr

+0

Benutzer, die Daten eingeben, kümmern sich nicht um Ihre Einschränkungen. :) –

2

Wenn Sie ein Perl-Modul zurücklassen können - dann tun Sie es.

was:

if($ip=~ m/^(\d\d?\d?)\.(\d\d?\d?)\.(\d\d?\d?)\.(\d\d?\d?)/ && 
      ($1 <= 255 && $2 <= 255 && $3 <= 255 && $4 <= 255) 
) {  
    print "valid IP."; 
} 
15
if($ip=~/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/ &&(($1<=255 && $2<=255 && $3<=255 &&$4<=255))) 
    { 
     print "valid\n"; 
    } 
    else 
    { 
     print "Invalid\n"; 
    } 
+3

lieber Freund, bitte empfehlen Data :: Validate :: IP ab sofort. Ihr lieber Freund. – xxxxxxx

+2

@xxxxxxx Warum? Tho-Code ist einfach genug, um überprüft werden. IPv4 wird höchstwahrscheinlich nicht ändern und auf einige Umgebungen, die eine Modulabhängigkeit hinzufügen nicht so trivial. – Matteo

0
(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5]) 

Eigentlich passt einige ungültige IP-Adressen, wie zB:

192.168.00.001

Eine etwas raffiniertere Lösung wäre:

(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)$ 
-2

Ich bin mir nicht sicher, warum ich das hier nirgends sehe, es ist kurz, prägnant und genial.

([0-9]{1,3}\.){3}[0-9]{1,3} 
+0

Es ist hauptsächlich, weil Perl Funktionen für diese Art von Sache hat. – Ivan

+3

Das entspricht 562.93.612.3, was keine IP ist. – Oesor

+0

Was ist so toll daran? Die Tatsache, dass es auch ungültige IP-Adressen erlaubt? Es würde '999.999.999.999' erlauben. –

5

Ich mag dieses ... so ziemlich wie Steve Hajducko, aber mit zitierten reg ex welch rooooock!

my $ip = '120.140.255.254'; # for example 

my $ipno = qr/ 
    2(?:5[0-5] | [0-4]\d) 
    | 
    1\d\d 
    | 
    [1-9]?\d 
/x; 

if ($ip =~ /^($ipno\.){3}$ipno$/){ 
    print "IP OK\n"; 
}; 

Ich ging zu einem Interview bei Arm in Cambridge, UK. Sie baten mich, eins auf die Tafel zu schreiben, und ich schrieb ein lahmes ... und später ... grübelte ich über meinen schlechten Versuch nach, um einen besseren zu machen. Vom Scheitern getrieben? Oder vielleicht gerade richtig irritiert. Ich habe immer noch den Job :)

+0

Nice one. :) Könntest du den verschiedenen Teilen einen Kommentar hinzufügen, damit die Leute sie besser verstehen? – Tallmaris

0

IPv4 IP-Validierung mit Portnummer

if ($ip =~ /(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})(:(\d{1,5}))?/) 
{ 
    if($1 > 255 || $2 > 255 || $3 > 255 || $4 > 255) 
    { 
     print "invalid ip\n"; 
     return ; 
    } 
    if((defined $6) && ($6 > 65536)) 
    { 
     print "invalid port\n"; 
     return ; 
    } 
    print "valid ip \n"; 
} 
else 
{ 
    print "invalid ip\n"; 
    return ; 
} 
0

$ip='123.0.0.1'; 
 
if($ip=~/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/ &&((($1<=255 && $1 > 0) && $2<=255 && $3<=255 &&$4<=255))) 
 
{ 
 
    print "valid\n"; 
 
} 
 
else 
 
{ 
 
    print "Invalid\n"; 
 
}

Blockquote

Hier in diesem Fall, dass wir 0,0 validieren .0.0 wird die gültige IP nicht berücksichtigen. und unterstützt alle verbleibenden IPs bis zu 1.0.0.0 bis 255.255.255.255`enter Code hier

Blockquote