欢迎!我白天是个邮递员,晚上就是个有抱负的演员。这是我的网站。我住在天朝的帝都,有条叫做Jack的狗。
这几天我的站长站在开发一个API接口,为了API接口安全运行,就需要判断用户提交IP是不是真实用户,防止用户勿输入或捣乱。
下面是我的站长站在网上收集的几种PHP判断IP地址是否合法的方法,有正规,函数和数组的方法。
正则表达式法<?php$ip = '192.168.0.5';//正规表达式$regexp = "/^((?:(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))\.){3}(?:25[0-5]|2[0-4]\d|((1\d{2})|([1 -9]?\d))))$/";if (preg_match($regexp, $ip)) { echo '是合法的IP地址';} else { echo '不是合法的IP地址';}?>
注:以上php代码,只能对ipv4的IP地址进行检测,如果是IPV6的IP地址,请参考下面的几个方法。
数组法<?php$ip = '192.168.0.5';//检测IP地址的函数function is_ip($ip){ $arr = explode('.',$ip); if(count($arr) != 4){ return false; }else{ for($i = 0;$i < 4;$i++){ if(($arr[$i] < 0) || ($arr[$i] > 255)){ return false; } } } return true;}//函数调用var_dump(is_ip($ip));//打印结果:bool(true)?>
代码说明:
1、将IP地址转换成数组
2、如果数组的元素的个数不为4,则不是合法的IP地址
3、数组每个元素的值,如果小于0,大于255,则不是合法的IP地址
filter_var() 函数法filter_var() 为php内置的函数,可以用它来判断一个IP地址的合法性!
例1:php判断一个IP地址是否合法
<?phpif(filter_var($ip, FILTER_VALIDATE_IP)) {// true}else {// false}?>
例2:php判断IP地址是否为IPV4的IP地址
<?phpif(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {// true}else {// false}?>
例3:php判断IP地址是否为合法的IPV6地址
<?phpif(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_RES_RANGE)) {// true}else {// false}?>
例4:php判断是否为合法的公共IPV4地址,并排除私有的IP地址
<?phpif(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE)) {// true}else {// false}?>
例5:php判断是否为公共的 IPV4 IP地址或 IPV6 IP地址
<?phpif(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) {// true}else {// false}?>
