PHP提取字符串中的手机号正则表达式怎么写


Posted in PHP onJuly 17, 2017

0. 简介

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 相关文章推荐
深入理解PHP中的Session和Cookie
Jun 21 PHP
PHP计算一年多少个星期和每周的开始和结束日期
Jul 01 PHP
详解YII关联查询
Jan 10 PHP
php session 写入数据库
Feb 13 PHP
linux平台编译安装PHP7并安装Redis扩展与Swoole扩展实例教程
Sep 30 PHP
PHP面向对象自动加载机制原理与用法分析
Oct 14 PHP
利用PHP绘图函数实现简单验证码功能的方法
Oct 18 PHP
PHP yii实现model添加默认值的方法(两种方法)
Nov 10 PHP
php一个文件搞定微信jssdk配置
Dec 12 PHP
php编程实现简单的网页版计算器功能示例
Apr 26 PHP
PHP使用栈解决约瑟夫环问题算法示例
Aug 27 PHP
PHP实现获取文件mime类型多种方法解析
May 28 PHP
老生常谈PHP中的数据结构:DS扩展
Jul 17 #PHP
PHPstorm快捷键(分享)
Jul 17 #PHP
利用PHP_XLSXWriter代替PHPExcel的方法示例
Jul 16 #PHP
PHP常用操作类之通信数据封装类的实现
Jul 16 #PHP
Laravel网站打开速度优化的方法汇总
Jul 16 #PHP
PHP实现创建微信自定义菜单的方法示例
Jul 14 #PHP
PHP微信公众号开发之微信红包实现方法分析
Jul 14 #PHP
You might like
php通过记录IP来防止表单重复提交方法分析
2014/12/16 PHP
php数组添加元素方法小结
2014/12/20 PHP
WordPress中自定义后台管理界面配色方案的小技巧
2015/12/29 PHP
php redis实现文章发布系统(用户投票系统)
2017/03/04 PHP
利用Dojo和JSON建立无限级AJAX动态加载的功能模块树
2007/03/24 Javascript
zepto.js中tap事件阻止冒泡的实现方法
2015/02/12 Javascript
Bootstrap每天必学之基础排版
2015/11/20 Javascript
使用jquery实现鼠标滑过弹出更多相关信息层附源码下载
2015/11/23 Javascript
jQuery基础知识点总结(DOM操作)
2016/06/01 Javascript
AngularJS 依赖注入详解和简单实例
2016/07/28 Javascript
JS对HTML表格进行增删改操作
2016/08/22 Javascript
js发送短信倒计时的简单实现方法
2016/09/08 Javascript
jQuery实现简单的tab标签页效果
2016/09/12 Javascript
Node.js中process模块常用的属性和方法
2016/12/13 Javascript
jQuery+HTML5实现弹出创意搜索框层
2016/12/29 Javascript
简单实现jQuery级联菜单
2017/01/09 Javascript
原生js仿浏览器滚动条效果
2017/03/02 Javascript
Vue实现双向数据绑定
2017/05/03 Javascript
小程序中英文混合排序问题解决
2019/08/02 Javascript
Vue父子之间值传递的实例教程
2020/07/02 Javascript
python插入排序算法的实现代码
2013/11/21 Python
Python中用于返回绝对值的abs()方法
2015/05/14 Python
深入理解Python 关于supper 的 用法和原理
2018/02/28 Python
python遍历文件夹找出文件夹后缀为py的文件方法
2018/10/21 Python
python程序 创建多线程过程详解
2019/09/23 Python
雅诗兰黛加拿大官网:Estee Lauder加拿大
2019/07/31 全球购物
回馈慈善的设计师太阳镜:DIFF eyewear
2019/10/17 全球购物
俄罗斯家居用品购物网站:Евродом
2020/11/21 全球购物
西部世纪面试题
2014/12/05 面试题
C# Debug和Testing相关面试题
2015/10/25 面试题
总经理秘书岗位职责
2014/03/17 职场文书
我的中国梦演讲稿500字
2014/08/19 职场文书
宣传委员竞选稿
2015/11/19 职场文书
SpringCloud Alibaba 基本开发框架搭建过程
2021/06/13 Java/Android
css布局巧妙技巧之css三角示例的运用
2022/03/16 HTML / CSS
win10此电脑打不开怎么办 win10双击此电脑无响应的解决办法
2022/07/23 数码科技