您好,欢迎访问一九零五行业门户网

PHP提取字符串中的手机号实现代码

本文主要和大家分享php提取字符串中的手机号实现代码,php通过正则表达式提取字符串中的手机号并判断运营商,简单快速方便,能提取多个手机号。下面通过本文实例代码给大家详细介绍,需要的的朋友参考下吧希望能帮助到大家。
1. 代码
<?php header("content-type:text/plain;charset=utf-8"); function findthephonenumbers($oldstr = ""){ // 检测字符串是否为空 $oldstr=trim($oldstr); $numbers = array(); if(empty($oldstr)){ return $numbers; } // 删除86-180640741122,0997-8611222之类的号码中间的减号(-) $strarr = explode("-", $oldstr); $newstr = $strarr[0]; for ($i=1; $i < count($strarr); $i++) { if (preg_match("/\d{2}$/", $newstr) && preg_match("/^\d{11}/", $strarr[$i])){ $newstr .= $strarr[$i]; } elseif (preg_match("/\d{3,4}$/", $newstr) && preg_match("/^\d{7,8}/", $strarr[$i])) { $newstr .= $strarr[$i]; } else { $newstr .= "-".$strarr[$i]; } } // 手机号的获取 $reg='/\d(?:86)?(\d{11})\d/is';//匹配数字的正则表达式 preg_match_all($reg,$newstr,$result); $nums = array(); // * 中国移动:china mobile // * 134[0-8],135,136,137,138,139,150,151,157,158,159,182,187,188 $cm = "/^1(34[0-8]|(3[5-9]|5[017-9]|8[278])\d)\d{7}$/"; // * 中国联通:china unicom // * 130,131,132,152,155,156,185,186 $cu = "/^1(3[0-2]|5[256]|8[56])\d{8}$/"; // * 中国电信:china telecom // * 133,1349,153,180,189 $ct = "/^1((33|53|8[09])[0-9]|349)\d{7}$/"; // foreach ($result[1] as $key => $value) {     if(preg_match($cm,$value)){       $nums[] = array(number => $value, type => 中国移动);     }elseif(preg_match($cu,$value)){       $nums[] = array(number => $value, type => 中国联通);     }elseif(preg_match($ct,$value)){       $nums[] = array(number => $value, type => 中国电信);     }else{       // 非法号码     }   }   $numbers[mobile] = $nums;   // 固定电话或小灵通的获取   $reg='/\d(0\d{10,12})\d/is';//匹配数字的正则表达式   preg_match_all($reg,$newstr,$result);   $nums = array();   // * 大陆地区固定电话或小灵通   // * 区号:010,020,021,022,023,024,025,027,028,029   // * 号码:七位或八位   $phs = /^0(10|2[0-5789]|\d{3})\d{7,8}$/;   foreach ($result[1] as $key => $value) {     if(preg_match($phs, $value)){       $nums[] = array(number => $value, type => 固定电话或小灵通);     } else {       // 非法     }   }   $numbers[landline] = $nums;   // 有可能是没有区号的固定电话的获取   $reg='/\d(\d{7,8})\d/is';//匹配数字的正则表达式   preg_match_all($reg,$newstr,$result);   $nums = array();   foreach ($result[1] as $key => $value) {     $nums[] = array(number => $value, type => 没有区号的固定电话);   }   $numbers[possible] = $nums;   // 返回最终数组   return $numbers; } // 测试数据 $str = this(8625010) is a number, and the another is here(09978625000) ,the phone number is 18064074452 and 13899555555。这是中文,这里有个13239323232的手机号,还有一个188779988441这是12位8613322114455的。这里又是一个手机号86-18064074455。还有一个区号分开写的0997-8625001hahaha; $nums = findthephonenumbers($str); print_r($nums);
2. 测试结果
array (  [mobile] => array     (       [0] => array         (           [number] => 18064074452           [type] => 中国电信         )       [1] => array         (           [number] => 13899555555           [type] => 中国移动         )       [2] => array         (           [number] => 13239323232           [type] => 中国联通         )       [3] => array         (           [number] => 13322114455           [type] => 中国电信         )       [4] => array         (           [number] => 18064074455           [type] => 中国电信         )     )   [landline] => array     (       [0] => array         (           [number] => 09978625000           [type] => 固定电话或小灵通         )       [1] => array         (           [number] => 09978625001           [type] => 固定电话或小灵通         )     )   [possible] => array     (       [0] => array         (           [number] => 8625010           [type] => 没有区号的固定电话         )     ) )
3. 结果解析
mobile 移动电话号码 landline 固定电话或者小灵通 possible 可能是没有区号的固定电话
相关推荐:
怎样用正则匹配电话号手机号和邮箱网址
php根据手机号判断运营商方法分享
php正则表达式实现手机号码中间4位用星号替换显示功能
以上就是php提取字符串中的手机号实现代码的详细内容。
其它类似信息

推荐信息