PHP提取字符串中的手机号正则表达式怎么写
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[];
for ($i=; $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[] 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[] 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[] 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
(
[] => Array
(
[number] =>
[type] => 中国电信
)
[] => Array
(
[number] =>
[type] => 中国移动
)
[] => Array
(
[number] =>
[type] => 中国联通
)
[] => Array
(
[number] =>
[type] => 中国电信
)
[] => Array
(
[number] =>
[type] => 中国电信
)
)
[landline] => Array
(
[] => Array
(
[number] =>
[type] => 固定电话或小灵通
)
[] => Array
(
[number] =>
[type] => 固定电话或小灵通
)
)
[possible] => Array
(
[] => Array
(
[number] =>
[type] => 没有区号的固定电话
)
)
)
3. 结果解析
mobile 移动电话号码
landline 固定电话或者小灵通
possible 可能是没有区号的固定电话
PHP提取字符串中的手机号正则表达式怎么写的更多相关文章
- C++ 提取字符串中的数字
C++ 提取字符串中的数字 #include <iostream> using namespace std; int main() { ] = "1ab2cd3ef45g&quo ...
- fortran中提取字符串中可见字符的索引
fortran中常常需要提取字符串中可见字符的索引,下面是个小例子: !============================================================= su ...
- JS中substring()方法(用于提取字符串中介于两个指定下标之间的字符)
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 使用awk提取字符串中的数字或字母
1.提取字符串中的数字 $ echo 'dsFUs34tg*fs5a%8ar%$#@' |awk -F "" ' { for(i=1;i<=NF;i++) { if ($i ...
- PHP提取字符串中的图片地址
PHP提取字符串中的图片地址 $str='<p><img border="0" src="upfiles/2009/07/1246430143_1.jp ...
- JS对象 substring() 方法用于提取字符串中介于两个指定下标之间的字符。
提取字符串substring() substring() 方法用于提取字符串中介于两个指定下标之间的字符. 语法: stringObject.substring(starPos,stopPos) 参 ...
- substring() 方法用于提取字符串中介于两个指定下标之间的字符。
substring() 方法用于提取字符串中介于两个指定下标之间的字符. 语法 stringObject.substring(start,stop) 参数 描述 start 必需.一个非负的整数,规定 ...
- 使用Java正则表达式提取字符串中的数字一例
直接上代码: String reg = "\\D+(\\d+)$"; //提取字符串末尾的数字:封妖塔守卫71 == >> 71 String s = monster. ...
- JQuery 遍历子元素+ each函数的跳出+提取字符串中的数字
最近脑袋迷糊的如同一团浆糊,一直出错. HTML代码如下图,现在想实现的功能是根据Ajax请求,获取到具体的button,以更新其样式.由于Button较多,每个Button都设置id,没有意义,想通 ...
随机推荐
- 《DSP using MATLAB》示例Example 8.25
- CentOS解压rar文件
默认不能解压rar文件. 进官网下载:http://www.rarsoft.com/download.htm RAR 5.40 for Linux x64 安装: # tar -zxvf rarlin ...
- python之wheel 包命名规则、abi 兼容和安装
一.windows安装python包,遇见的问题 1.python3以后的版本,安装python包,可以直接使用pip安装,但是安装时偶尔报错 2.安装python源码包,如何确定自己该安装哪个版本, ...
- autoconf 添加三方库(libcurl)简单试用
1. 参考项目 https://github.com/rongfengliang/autoconf-project 2. 项目说明 a. 项目结构 ├── Jenkinsfile # jenkins ...
- nginx 缓存处理
核心指令 proxy_cache_path /data/nginx/cache/one levels=1:2 keys_zone=one:10m max_size=10g; proxy_cache ...
- 几个中文排版web 类库
1. typo.css http://typo.sofi.sh/ 2. yue.css http://lab.lepture.com/yue.css/ 规范,统一才是开发的王道.
- Face detection in color images, 彩色图像中的人脸检测
人脸检测在视频监督,人机交互,人脸识别和人脸图像数据库管理等应用领域处于很重要的地位. 论文<Face detection in color images>中给出一种在YCbCr空间检测人 ...
- 1-3 superset数据模型
在models.py中大部分的class对应数据库中的表,那么我们就从AuditMixinNullable这个类开始我们的模型解析. AuditMixin:这个类是FAB(Flask AppBuil ...
- ios生成自签名证书,实现web下载安装app
抄自http://beyondvincent.com/blog/2014/03/17/five-tips-for-using-self-signed-ssl-certificates-with-ios ...
- GDB调试字符数组时指针和数组区别的体现
测试ftell函数时发现报错,先贴源码 // File Name: ftell.c #include <stdio.h> #include <stdlib.h> int mai ...