Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 检查字符串是否为ip子网_Php_Regex_Ip_Subnet - Fatal编程技术网

Php 检查字符串是否为ip子网

Php 检查字符串是否为ip子网,php,regex,ip,subnet,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; } els

我将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;
        }
    }

如何使子网正常工作

您可以这样做:

$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";
你可以试试这个

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



参考您的“网络”不正确<代码>127.0.0.1不是正确的网络地址(可以应用网络掩码24)。将其修复为
127.0.0.0
。然后将您的网络分为两部分:
127.0.0.0
24
。然后将24转换为相应的位。此检查之后是:
HOST&MASK=NET
。若它是正确的,那个么答案是“属于”我刚才给出的示例编号,这可能是我的习惯,不需要测试就发布代码。请参阅工作演示:最有可能的代码板使用的是一些非常旧的PHP版本。好的,对不起。你能告诉我你的正则表达式在做什么吗(匹配的规则是什么),我不太擅长理解正则表达式,请确定。正则表达式试图通过查找
/
前后的文本来中断IP字符串。如果
preg_match
成功,则表示已找到子网。捕获的组#1将是实际IP地址,在这种情况下,捕获的组#2将是子网。如果
preg_match
不成功,则它是常规IP,
$subnet
将为空。是的,这与我已经做过的类似,但这不是最好的方法,因为$IP可能包含一些不应作为子网或ipthank的字符。我想要的只是代码的这一部分:preg_match(“~^(?[0-9]{1,3}\){3}[0-9]{1,3}/[0-9][0-9]~”,$ipmask,$subnet)
<?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);

    }

}


    ?>