ip地址正则表达式分析
- 1位数 0-9 \d
- 2位数 10-99 [1-9]\d
- 3位数 100-199 1\d{2}
- 0-199合并写法 (1\d{2})|([1-9]?\d)
- 200-249 2[0-4]\d
- 250-255 25[0-5]
function ip(){
$source = "009";
$pattern = "#^(1\d{2})|([1-9]?\d)$#";
$result = preg_match($pattern,$source);
if($result){
echo "匹配成功";
}
else{
echo "匹配失败";
}
}
ip();
无法排除09等开头的IP地址,匹配成功结果如下:
我遇到了一个问题,1-199合并写法,无法排除0开始的情况,比如09、099等,也能匹配成功,怎样可以更精确一下写法?
解决方案:不将1-199写法合并
代码如下:
function ip(){
$source = "09";
// 可以排除09,099开始的不合法IP
$pattern = "#^([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5])(\.([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5])){3}$#";
$result = preg_match($pattern,$source);
if($result){
echo "匹配成功";
}
else{
echo "匹配失败";
}
}
ip();