600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 内网ip正则表达式php PHP使用正则表达式判断IP地址是否正确

内网ip正则表达式php PHP使用正则表达式判断IP地址是否正确

时间:2020-09-07 03:55:39

相关推荐

内网ip正则表达式php PHP使用正则表达式判断IP地址是否正确

IP 地址想必大家都很熟悉,由 4 组 0~255 之间的数字组成,每个数字之间使用英文句号“.”分割,例如 192.168.0.1 就是一个有效的 IP 地址。想要正确的使用正则表达式来判断 IP 地址正确与否,重点就是如何使用正则表达式来表示 IP 中的 4 个数字,保证它们的取值范围在 0~255 之间。

拿 IP 中的其中一个数字来说,既然是数字,那么我们可以使用正则表达式[0-9]{1,3}来表示。由于[0-9]{1,3}可以匹配的取值范围在 0~999 之间,超出了 IP 的有效范围,所以不能使用[0-9]{1,3}。 想要保证 IP 地址的数字部分不超过 255,可以将 0~255 这个范围划分为 4 个范围,分别是 0~99、100~199、200~249、250~255,这样就可以很方便的使用正则表达式表示了,如下所示:

([0-9]?[0-9])|(1[0-9]{2})|(2[0-4][0-9])|(25[0-5])

表达式的具体含义可以对照《PHP正则表达式》一节中的内容,这里不再赘述。

有了上面的正则表达式,剩下的部分就简单多了,最简单的就是将上面的正则表达式重复 4 遍,同时在每一遍之间加上“\.”来表示 IP 地址中的“.”,如下所示:

((([0-9]?[0-9])|(1[0-9]{2})|(2[0-4][0-9])|(25[0-5]))\.)((([0-9]?[0-9])|(1[0-9]{2})|(2[0-4][0-9])|(25[0-5]))\.)((([0-9]?[0-9])|(1[0-9]{2})|(2[0-4][0-9])|(25[0-5]))\.)(([0-9]?[0-9])|(1[0-9]{2})|(2[0-4][0-9])|(25[0-5]))

将正则表达式写成上面这样虽然逻辑上是正确的,但是太长了,并且不方便阅读,所以我们还可以将它精简一下。

((([0-9]?[0-9])|(1[0-9]{2})|(2[0-4][0-9])|(25[0-5]))\.){3}(([0-9]?[0-9])|(1[0-9]{2})|(2[0-4][0-9])|(25[0-5]))

至此正则表达式就是定义好了,下面就将它放到代码中来验证一下,示例代码如下所示:

function validateip($ip){

$preg="/^((([0-9]?[0-9])|(1[0-9]{2})|(2[0-4][0-9])|(25[0-5]))\.){3}(([0-9]?[0-9])|(1[0-9]{2})|(2[0-4][0-9])|(25[0-5]))/";

preg_match($preg,$ip,$matches);

if(!empty($matches)) return 1;

return 0;

}

$arr_ip = [

'-192.168.0.1',

'127.0.0.1',

'218.206.211.1',

'192.0.133.255',

'255.255.255.0',

'-192.245.0.255',

'11.12.13.14',

'192.256.255.255'

];

foreach ($arr_ip as $value) {

if(validateip($value)){

echo $value.' 是正确的 IP 地址

';

}else{

echo $value.' 不是正确的 IP 地址

';

}

}

?>

运行结果如下:

-192.168.0.1 不是正确的 IP 地址

127.0.0.1 是正确的 IP 地址

218.206.211.1 是正确的 IP 地址

192.0.133.255 是正确的 IP 地址

255.255.255.0 是正确的 IP 地址

-192.245.0.255 不是正确的 IP 地址

11.12.13.14 是正确的 IP 地址

192.256.255.255 不是正确的 IP 地址

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。