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?
Welcher Regex kann ich verwenden, um eine gültige IP-Adresse in Punkt-Dezimal-Notation darzustellen?
Antwort
CPAN ist dein Freund: Regex::Common oder Net::IP::Match::Regexp.
+1: CPAN ist immer dein Freund für Perl verwandte Frage. –
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ß.
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
... 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
Benutzer, die Daten eingeben, kümmern sich nicht um Ihre Einschränkungen. :) –
How do I write a regular expression that matches an IPv4 dotted address?
lange Geschichte kurz: Tu es nicht ^^.
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.";
}
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";
}
lieber Freund, bitte empfehlen Data :: Validate :: IP ab sofort. Ihr lieber Freund. – xxxxxxx
@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
(?:(?:[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)$
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}
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 :)
Nice one. :) Könntest du den verschiedenen Teilen einen Kommentar hinzufügen, damit die Leute sie besser verstehen? – Tallmaris
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 ;
}
$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
+1 seine eine einfache und berechtigte Frage. –
Kürzeste? '. *' :-) – molf
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