亲历PHP面试题——写一个验证IP地址的isValidIp函数
下午两点,接到公司的面试电话,这次是电话面试,主要问了PHP函数,数据库性能优化,Apache规则等基础、高级的都有的东西,一时间还真有点招架不住。第一个题是关于PHP函数的问题,是要求写一个验证IP地址的函数,当时写的让面试官明显看出漏洞来了,“127.000.00023.0045”这验证吗?囧了~~~
自已一个人在教室没什么事,总结一下,巩固一下,反思一下。写了一个验证IP的isValidIp函数,验证没问题~~~
<?PHP
function isValidIp($str){
$str = trim($str);
if(preg_match('/\.0\d*/',$str,$array)){
return false;
}
if(ip2long($str) == -1){
return false;
}
return true;
}
$ip = "109.254.34.33";
if(isValidIp($ip)){
echo "ol";
}else {
echo 'Not';
}
?>
首先,对字符串中的前置0进行匹配,如果存在则返回false;这里的匹配规则是以“.”为界限的,很明显第一个如果有前置0了怎么办?偶然,ip2long却给我解决了;
然后使用ip2long函数进行测试,这个函数如果对输入的字符串明显不符合ip地址规则,会返回-1,这里判定false时返回false;这里还可以解决第一个的问题,当输入“00012.23.3.4”时,ip2long也会返回-1,这里正好得到验证。
验证测试数据:
1 192.168.034.34
2 012.23.43.56
3 123.255.23.34
4 123.256.34.45
5 234.-1.234.45
测试无误,可惜面试时没想到~~~~