检查字符串是否为ip子网

时间:2014-01-29 06:25:51

标签: php regex ip subnet

我将ip地址列表作为字符串,但该列表中也有一些子网。 例如:

... 127.0.0.1(这是ip) 127.0.0.1/24(这是子网) ...

我想检查哪个是ip,哪个是子网。到目前为止,我可以过滤ip,但我找不到检查子网的方法:

foreach ($ipstrings as $ip) {
        if(filter_var($ip, FILTER_VALIDATE_IP) !== false){
            $ips[] = $ip;
        }
        elseif (is_subnet) {
            $subnets[] = $ip;
        }
    }

如何使is_subnet工作?

3 个答案:

答案 0 :(得分:1)

您可以这样做:

$ip = '127.0.0.1/124';
$subnet = '';
if (preg_match('~^(.+?)/([^/]+)$~', $ip, $m)) {
   $ip = $m[1];
   $subnet = $m[2];
}
echo filter_var($ip, FILTER_VALIDATE_IP) . ", $subnet";

答案 1 :(得分:1)

<?php

// array of ip and subnets
$ipandmask = array('127.0.0.1','127.0.0.0','127.0.0.2','127.0.0.3/24','127.0.0.4/16'); 

foreach ($ipandmask as $ipmask) {

        if(preg_match('~^(?:[0-9]{1,3}\.){3}[0-9]{1,3}/[0-9][0-9]~',$ipmask,$subnet)){
        echo "</br>";
        echo "Subnet =>";
        print_r ($subnet);

    }

        if(preg_match('~^(?:[0-9]{1,3}\.){3}[0-9]{1,3}~',$ipmask,$ip)){
        echo "</br>";
        echo "Ip =>";
        print_r ($ip);

    }

}


    ?>

答案 2 :(得分:0)

你可以试试这个......

<?php
$ip="127.0.0.1/25";
$x = explode("/",$ip);
print_r($x);
if (isset($x[1])){
    echo"subnet";
} else {echo "ip";}
?>