大家在做PHP开发的时候,遇到如何判断IP地址、以及验证IPv4和IPv6的有效性。
接下来我将为大家介绍几个功能强大的验证和判断IP地址的有效性,这样在开发过程对我非常的有帮助,接下来请看看下面的代码如何验证IP的值。此篇文章是由
SKY8G网独立提供给大家,未经允许禁止抄袭,否则必究。
好了,多余的话不多 ,直接代码展示给大家看:
IPv4函数判断
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | //此函数有SKY8G网提供 function validateIPv4($value) { if (preg_match('/^([01]{8}\.){3}[01]{8}\z/i', $value)) { //二进制数 00000000.00000000.00000000.00000000 $value = bindec(substr($value, 0, 8)) . '.' . bindec(substr($value, 9, 8)) . '.' . bindec(substr($value, 18, 8)) . '.' . bindec(substr($value, 27, 8)); } elseif (preg_match('/^([0-9a-f]{2}\.){3}[0-9a-f]{2}\z/i', $value)) { //十六进制格式 ff.ff.ff.ff $value = hexdec(substr($value, 0, 2)) . '.' . hexdec(substr($value, 3, 2)) . '.' . hexdec(substr($value, 6, 2)) . '.' . hexdec(substr($value, 9, 2)); } $ip2long = ip2long($value); if ($ip2long === false) { return false; } return ($value == long2ip($ip2long)); } |
注:validateIPv4函数介绍—-
1.此函数是验证IPv4的有效性
2.给定的参数必须是字符串,支持二进制,可以是10进制数,还可以是16进制的字符串。
3.返回值为布尔值。
调用函数和输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 | //例如IP为:122.225.236.224对应的二进制,16进制如下 //10进制数 var_dump(validateIPv4('122.225.236.224')); //2进制数 var_dump(validateIPv4('01111010.11100001.11101100.11100000')); //16进制数 var_dump(validateIPv4('7A.E1.EC.E0')); ------------------------------------------------- 输出: bool(true) bool(true) bool(true) |
IPv6函数判断
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | function validateIPv6($value) { if (strlen($value) < 3) { return $value == '::'; } if (strpos($value, '.')) { $lastcolon = strrpos($value, ':'); if (! ($lastcolon && $this->validateIPv4(substr($value, $lastcolon + 1)))) { return false; } $value = substr($value, 0, $lastcolon) . ':0:0'; } if (strpos($value, '::') === false) { return preg_match('/\A(?:[a-f0-9]{1,4}:){7}[a-f0-9]{1,4}\z/i', $value); } $colonCount = substr_count($value, ':'); if ($colonCount < 8) { return preg_match('/\A(?::|(?:[a-f0-9]{1,4}:)+):(?:(?:[a-f0-9]{1,4}:)*[a-f0-9]{1,4})?\z/i', $value); } //特殊情况双冒号结束或开始 if ($colonCount == 8) { return preg_match('/\A(?:::)?(?:[a-f0-9]{1,4}:){6}[a-f0-9]{1,4}(?:::)?\z/i', $value); } return false; } |
IPv6的介绍如下图:
调用和输出:
1 2 3 4 5 | //天津市IPv6,当检测IPv6有效时输出为真,必须输入的值为简化前的IP var_dump(validateIPv6('2408:84e3:8:d7f6:8d:0:0:0')); --------------------------------------------------------------- 输出: int(1) |
最后在介绍未来的IPvFuture函数
1 2 3 4 5 6 7 | function validateIPvFuture($value){ $regex = '/^v([[:xdigit:]]+)\.[[:alnum:]\-\._~!\$&\'\(\)\*\+,;=:]+$/'; $result = (bool) preg_match($regex, $value, $matches); //实现不能为现有的IPv4和IPv6地址形式描述如下 return ($result && $matches[1] != 4 && $matches[1] != 6); } |
注:有待于研究持续关注中。。
学习了
代码参考了
感谢分享
嗯,希望多来SKY8G网,这将为你提供免费的IT技术知识,和最热门的文章,期待你订阅SKY8G网文章。