Какое регулярное выражение я могу использовать для сопоставления с любым действительным IP-адресом, представленным в десятичном формате? - PullRequest
9 голосов
/ 27 февраля 2010

Какое регулярное выражение я могу использовать для сопоставления с любым действительным IP-адресом, представленным в десятичном формате?

Ответы [ 10 ]

15 голосов
/ 01 марта 2010
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";
     }
14 голосов
/ 27 февраля 2010

CPAN - ваш друг: Regex :: Common или Net :: IP :: Match :: Regexp .

5 голосов
/ 02 июня 2013

Мне нравится этот ... почти как у Стива Хайдуцко, но я использую цитату reg ex which 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";
};

Я пошел на собеседование в Арм в Кембридже, Великобритания. Они попросили меня написать одну на доске, а я написал какую-то отстойную ... а потом ... задумался над моей неудачной попыткой сделать лучшую. Управляется неудачей? Или, может быть, просто очень раздражен этим. Я все еще получил работу:)

2 голосов
/ 27 февраля 2010

Если вы можете оставить модуль Perl позади - тогда сделайте это.

как насчет:

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.";
}
2 голосов
/ 27 февраля 2010
1 голос
/ 27 февраля 2010

Для IPv4 в формате A.B.C.D (десятичный) в виде одной строки:

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

Если за адресом в строке ничего не следует, он может быть заключен в:

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

Веселитесь.

0 голосов
/ 02 января 2015

$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

Здесь в этом случае мы проверяем 0.0.0.0 и не будем считать действительный IP. и поддерживая все остальные IP до 1.0.0.0 до 255.255.255.255, введите здесь код

Blockquote

0 голосов
/ 06 августа 2013

Проверка IPv4 IP с номером порта

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 голосов
/ 29 ноября 2012

Не уверен, почему я нигде этого не вижу, он короткий, лаконичный и потрясающий.

([0-9]{1,3}\.){3}[0-9]{1,3}
0 голосов
/ 24 мая 2010
(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])

Фактически совпадает с некоторыми недействительными IP-адресами, такими как:

192.168.00.001

Немного более изысканное решение будет:

(?:(?: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)$
...