Просмотр файла valid_ip_address.pl

Размер файла: 2.46Kb
# подпрограмма valid_ip возвращает IP адрес в случае успешной проверки и undef в противоположном # случае
sub valid_ip {
my @oct = grep { $_ >= 0 && $_ <= 255 && $_ !~ /^0\d{1,2}$/ } split /\./, shift;
return unless @oct == 4;
return join('.', @oct);
}

# более побробное описание этих и других скриптов на http://rassanov.ru/skripty/ip-adres.htm
# valid_ip_1 возвращает 1 в случае валидности IP адреса и undef в противоположном случае
sub valid_ip_1 {
4 == grep { $_ >= 0 && $_ <= 255 && $_ !~ /^0\d{1,2}$/ } split /\./, shift;
}


# valid_ip_2 возвращает IP адрес в случае его валидности и undef в противоположном случае
sub valid_ip_2 {
my @octets = split /\./, shift;
for ( my $i = 0; $i <= 3; $i++ ) {
     if ( defined $octets[$i] ) {
          return unless ($octets[$i] >= 0 && $octets[$i] <= 255 && $octets[$i] !~ /^0\d{1,2}$/);
     } else { $octets[$i] = 0; }
}
return join('.', @octets);
}


# valid_ip_3 возвращает true и валидный IP адрес или false и IP адрес с "подсвеченными" ошибочными # октетами
sub valid_ip_3 {
    my @octets = split /\./, shift;
    my $osh = 0;
    for ( my $i = 0; $i <= 3; $i++ ) {
            if ( defined $octets[$i] ) {
                unless ($octets[$i] >= 0 && $octets[$i] <= 255 && $octets[$i] !~ /^0\d{1,2}$/) {
                        $octets[$i] = "<font color='#FF0000'> $octets[$i] </font>";
                        $osh++;
                }
            } else { $octets[$i] = 0; }
    }
    return('true', join('.', @octets)) unless ( $osh );
    return('false', join('.', @octets));
}


# valid_ip_4 возвращает тескт ошибки либо 0 в случае валидности IP
sub valid_ip_4 {
    my $ip = shift;
    return "Не указан IP" unless ( $ip );

    return "Недопустимые символы в IP $ip" unless ( $ip =~ m/^[\d\.]+$/ );

    return "Недопустимый IP $ip - начинается с точки" if ($ip =~ m/^\./);

    return "Недопустимый IP $ip - заканчивается точкой" if ($ip =~ m/\.$/);

    # Число октетов
    return "Ошибка - IP адрес должен содержать 4 октета" unless ( 3 == ($ip =~ tr/\./\./) );

    # Проверка пустых октетов
    return "Не указана часть IP - две точки подряд" if ($ip =~ m/\.\./);

    # Проверка на допустимый диапазон значений в октете
    foreach (split /\./, $ip) {
        return "Недопустимое значение в IP адресе $ip - $_" unless ($_ >= 0 && $_ < 256 && $_ !~ /^0\d{1,2}$/ );
    }
    return 0;
}
# При перепечатке ссылка на сайт http://rassanov.ru и автора обязательна. Дмитрий Рассанов