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

发布时间 - 2026-01-11 02:22:19    点击率:

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  # 提取字符串中的数字  # 提取数字正则表达式  # java使用正则表达式判断手机号的方法示例  # 正则表达式验证用户名、密码、手机号码、身份证(推荐)  # Android 正则表达式验证手机号、姓名(包含少数民族)、身份证号  # iOS 正则表达式判断手机号码、固话  # JS正则表达式验证账号、手机号、电话和邮箱是否合法  # 一个容易犯错的js手机号码验证正则表达式(推荐)  # Android判断11位手机号码的方法(正则表达式)  # Android 2018最新手机号验证正则表达式方法  # 固定电话  # 中国电信  # 中国联通  # 这是  # 正则表达式  # 还有一个  # 小编  # 有个  # 又是  # 多个  # 有可能  # 在此  # 给大家  # 所述  # 给我留言  # 感谢大家  # 为空  # 七位  # 疑问请  # 有任何 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何处理文件下载请求?(Response示例)  济南网站建设制作公司,室内设计网站一般都有哪些功能?  googleplay官方入口在哪里_Google Play官方商店快速入口指南  如何快速搭建二级域名独立网站?  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  Laravel如何实现本地化和多语言支持?(i18n教程)  Python高阶函数应用_函数作为参数说明【指导】  公司网站制作需要多少钱,找人做公司网站需要多少钱?  Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)  悟空浏览器如何设置小说背景色_悟空浏览器背景色设置【方法】  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南  Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件  Laravel如何使用模型观察者?(Observer代码示例)  如何用5美元大硬盘VPS安全高效搭建个人网站?  高端网站建设与定制开发一站式解决方案 中企动力  Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)  Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲  Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】  Bootstrap CSS布局之列表  谷歌Google入口永久地址_Google搜索引擎官网首页永久入口  如何用JavaScript实现文本编辑器_光标和选区怎么处理  Python3.6正式版新特性预览  Laravel怎么调用外部API_Laravel Http Client客户端使用  Android中AutoCompleteTextView自动提示  Laravel如何自定义分页视图?(Pagination示例)  打开php文件提示内存不足_怎么调整php内存限制【解决方案】  网站制作报价单模板图片,小松挖机官方网站报价?  奇安信“盘古石”团队突破 iOS 26.1 提权  php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】  laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法  Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】  如何快速搭建高效WAP手机网站吸引移动用户?  Java类加载基本过程详细介绍  标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南  WordPress 子目录安装中正确处理脚本路径的完整指南  如何确保FTP站点访问权限与数据传输安全?  详解jQuery中的事件  Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  如何彻底删除建站之星生成的Banner?  Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境  Laravel Seeder填充数据教程_Laravel模型工厂Factory使用  Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】  jquery插件bootstrapValidator表单验证详解  Laravel Docker环境搭建教程_Laravel Sail使用指南  大学网站设计制作软件有哪些,如何将网站制作成自己app?  EditPlus中的正则表达式 实战(4)  海南网站制作公司有哪些,海口网是哪家的?  Laravel如何实现多对多模型关联?(Eloquent教程)