0. 简介

PHP通过正则表达式提取字符串中的手机号并判断运营商,简单快速方便,能提取多个手机号。

1. 代码

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$/", $newStr) && preg_match("/^\d/", $strArr[$i])){

$newStr .= $strArr[$i];

} elseif (preg_match("/\d$/", $newStr) && preg_match("/^\d/", $strArr[$i])) {

$newStr .= $strArr[$i];

} else {

$newStr .= "-".$strArr[$i];

}

}

// 手机号的获取

$reg='/\D(?:86)?(\d)\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$/";

// * 中国联通:China Unicom

// * 130,131,132,152,155,156,185,186

$cu = "/^1(3[0-2]|5[256]|8[56])\d$/";

// * 中国电信:China Telecom

// * 133,1349,153,180,189

$ct = "/^1((33|53|8[09])[0-9]|349)\d$/";

//

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)\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)\d$/";

foreach ($result[1] as $key => $value) {

if(preg_match($phs, $value)){

$nums[] = array("number" => $value, "type" => "固定电话或小灵通");

} else {

// 非法

}

}

$numbers["landline"] = $nums;

// 有可能是没有区号的固定电话的获取

$reg='/\D(\d)\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提取字符串中的手机号相关推荐

  1. c 中html抓取页面图片,【教程】抓取网并提取网页中所需要的信息 之 C#版

    在通过: 了解了抓取网页的一般流程之后,加上之前介绍的: 应该就很清楚如何利用工具去抓取网页,并分析源码,获得所需内容了. 下面,就来通过实际的例子来介绍,如何通过Python语言,实现这个抓取网页并 ...

  2. Java过滤字符串中的手机号+提取字符串中的手机号+验证是否存在手机号

    河南循中网络科技有限公司 - 精心创作,详细分解,按照步骤,均可成功! 文章目录 结果 代码 结果 话不多说,直接看main执行结果如下 代码 <!-- apache公共基础类 -->&l ...

  3. 从html中提取手机号码,C#从字符串中提取电话号码、手机号码

    C#程序目的:从一堆字符串中提取电话号码.手机号码,要求字符串中的号码以非数字字符分割.原理:利用正则表达式提取纯数字字符串数组,然后利用长度等号码特征,筛选过滤. 代码: //思路仅供参考 //nu ...

  4. 正则表达式提取字符串中的手机号码

    正则表达式提取字符串中的手机号码 1.正则表达式提取思路 1.先提取出来11位的数字组合 2.再判断这11位的数字组合是否符合要求 2.要用到的正则表达式功能 a.match() 用于提取()里面的符 ...

  5. php 取字符串中的字母数字,php如何提取字符串中的数字?php提取字符串中数字的方法总结(附代码)...

    本篇文章给大家带来的内容是关于php如何提取字符串中的数字?php提取字符串中数字的方法总结(附代码) ,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. PHP提取字符串中的第一组数字 ...

  6. 使用jsp,tag提取字符串中的单词

    ** 使用jsp,tag提取字符串中的单词 ** JSP中调用Tag 在表单中输入字符串,提取其中的单词 参考代码: giveString.jsp <%@ page contentType=&q ...

  7. php提取字符串中数字,php提取字符串中的数字教程

    字符串是我们程序员必定接触法人,有时候工作中需要在一串字符串中将所有的数字提取出来,其实研究一下这种方法还挺多,对如何使用PHP将字符串中的数字提取出来的功能我们做了一个小总结,和大家一起分享一下,总 ...

  8. vue提取字符串中中文汉字的大写首字母

    vue提取字符串中中文汉字的大写首字母 1.需求背景 最近开发vue项目,在关于药品的项目中有个需求是要提取药品中文名称的首字母组成拼音码,例如:六味地黄丸提取首字母后是LWDHW. 解决方案 这里需 ...

  9. python提取字符串中的字符

    一.取单个字符 可以使用 Python 的字符串索引来提取字符串中的字符.索引从 0 开始,可以使用方括号 [] 来访问字符串中的单个字符. # 取单个字符,索引从 0 开始 path = 'FLX_ ...

  10. mysql 提取字符串中数字

    开发过程中经常会遇到一些提取字符串中数字做递增的需求,例如把杭上0001人调字第X号与杭上清0005人调字第X号取出数字做递增,这种没什么规律,又不好截取,如果能提取出汉字中对应的数字取最大值做递增就 ...

最新文章

  1. Html中元素的分类
  2. 2010年北京大学计算机研究生机试真题
  3. Java并发编程的基础-其他的线程复位
  4. 重温 const 指针
  5. android 智能指针的学习先看邓凡平的书扫盲 再看前面两片博客提升
  6. 程序设计基础(C语言)
  7. php header详解
  8. Dijkstra算法详解:
  9. 改善C#程序的建议9:使用Task代替ThreadPool和Thread
  10. uploadify php 重命名,uploadify与php使用详解
  11. HDU4282 A very hard mathematic problem 快速幂
  12. 李佩:阿里本地生活线上线下融合场景中的图像检测技术
  13. 将社会工程学演绎成艺术---弗兰克·威廉·阿巴内尔的传奇故事--黑客博客
  14. portknocking(端口试探)简介
  15. 解决Git克隆代码 the remote end hung up unexpectedly 错误
  16. ArcEngine编辑模块——将线段按距离、按比例分割成N条线段
  17. 复旦大学计算机专业博士生导师,危辉 - 复旦大学 - 计算机科学技术学院
  18. Django讲课笔记02:Django环境搭建
  19. 微信小程序开发(四)入门之打卡功能开发
  20. 英特尔投资部宣布增投10家新创公司,他们都有哪些能耐?---ESM

热门文章

  1. 如何用计算机判断直角三角形,三角形角度(直角三角形懒人计算器)
  2. 牛逼!B 站 up 主开源视频字幕自动翻译神器!
  3. 一张图概括淘宝直播背后的前端技术 | 赠送多媒体前端手册
  4. 清明上河图对计算机技术的启发,走进清明上河图沉浸式数字音画项目在京发布-微软亚洲研究院.PDF...
  5. 大学英语四级考试大纲
  6. 在CentOS8下安装搭建gitlab下载安装备份升级迁移记录
  7. LCD驱动芯片ST7789V
  8. android为APK新建SELINUX权限域seapp_contexts
  9. 点云数据处理(分类、分割、检测)PointNet
  10. VUE PDF上传预览下载(vue-pdf)