题解 | #验证IP地址#
验证IP地址
http://www.nowcoder.com/practice/55fb3c68d08d46119f76ae2df7566880
还行,IPv6判断稍微复杂些
<?php
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 验证IP地址
* @param IP string字符串 一个IP地址字符串
* @return string字符串
*/
function solve( $IP )
{
$arr=explode('.',$IP);
if(checkIpV4($arr)){
return 'IPv4';
}
$arr=explode(':',$IP);
return checkIpV6($arr)?'IPv6':'Neither';
}
function checkIpV6($arr){
$len=count($arr);
if($len<8){
return false;
}
foreach($arr as $item){
if(checkv6($item)==false){
return false;
}
}
return true;
}
function checkv6($item){
$len=strlen($item);
if($len<=0 || $len>4){
return false;
}
$zeroCount=0;
for($i=0;$i<$len;$i++){
$c=$item[$i];
if(is_numeric($c)){
if($c=='0'){
$zeroCount++;
}
}else{
$c=strtolower($c);
if($c<'a' || $c>'z'){
return false;
}
}
}
if($zeroCount>1 && $zeroCount==$len){
return false;
}
return true;
}
function checkIpV4($arr){
$len=count($arr);
if($len<4){
return false;
}
foreach($arr as $item){
if(!is_numeric($item)){
return false;
}
$sublen=strlen($item);
if($sublen<=0 || ($sublen>1 && $item[0]=='0')){
return false;
}
$num=intval($item);
if($num<0 || $num>255){
return false;
}
}
return true;
}