最新手机号正则表达式,及生成程序
获取手机号段网址:https://www.jihaoba.com/tools/haoduan/
先给截止于日期 2021-08-20的结果
String patternPHone="^1((3[0-9])|(4[5-7])|(4[0|9])|(5[0-3])|(5[5-9])|66|(7[5-8])|(7[2|3])|(8[0-9])|(9[5-9])|(9[1|3]))\\d{8}$";
Pattern p = Pattern.compile(patternPHone);
Matcher m = p.matcher("16615987698");
System.out.println(m.matches());
由于手机号段会不断更新,每次自己写难度不大,但是容易有漏的,所以当正则表达式过时时请使用下方Java类生成,其第一步是拿到需要校验的手机号段,这个可以从上方提供的连接地址去获取。再以逗号分割的字符串,替换掉下方程序中参数,执行生成即可。 运行环境 不低于 jdk1.8
ps:像这种验证的正则表达式,过一段时间都会变更,在项目中使用,当三大电信公司的手机号段变更时,能及时变更,且即时生效,最好将其存到缓存技术中,如,redis,没有放到关系性数据库,mysql,oracle中也可以。这样只需要数据运维一下,项目就可以正常使用。
package test;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;import com.sun.xml.internal.ws.util.StringUtils;public class TestPhone {public static void main(String[] args) {String phones="139,138,137,136,134,135,147,150,151,152,157,158,159,172,178,182,183,184,187,188,195,197,198,130,131,132,140,145,146,155,156,166,185,186,175,176,196,133,149,153,177,173,180,181,189,191,193,199";productPhonePattern(phones);String patternPHone=productPhonePatternPLus(phones);Pattern p = Pattern.compile(patternPHone);Matcher m = p.matcher("16615987698");System.out.println(m.matches());}public static String productPhonePattern(String phones) {String[] phonestr =phones.split(",");List<Integer> phoneInteger=new ArrayList<>(); for(String phone:phonestr) {phoneInteger.add(Integer.valueOf(phone));}Map<String,String> map =new HashMap<>();StringBuffer sb =new StringBuffer();phoneInteger.stream().sorted((o1, o2) -> o1-o2)//升序.collect(Collectors.toList()).forEach(phone->{if(map.get(String.valueOf(phone).substring(0,2))==null) {map.put(String.valueOf(phone).substring(0,2), "");if(map.size()>1) {sb.append("])|("+String.valueOf(phone).substring(0,2)+"["+String.valueOf(phone).substring(2));}else {sb.append("("+String.valueOf(phone).substring(0,2)+"["+String.valueOf(phone).substring(2));}}else {sb.append("|"+String.valueOf(phone).substring(2));}});System.out.println("枚举结果,好逊:"+sb.toString()+"])");return sb.toString();} public static String productPhonePatternPLus(String phones) {String[] phonestr =phones.split(",");List<Integer> phoneInteger=new ArrayList<>(); for(String phone:phonestr) {phoneInteger.add(Integer.valueOf(phone));}Map<String,String> map =new HashMap<>();//StringBuffer sb =new StringBuffer();phoneInteger=phoneInteger.stream().distinct()//去重.sorted((o1, o2) -> o1-o2)//升序.collect(Collectors.toList());StringBuffer sb =null;for(int i=0;i<phoneInteger.size();i++ ) {if(map.get(String.valueOf(phoneInteger.get(i)).substring(0,2))==null) {if(map.size()>0) {map.put(String.valueOf(phoneInteger.get(i-1)).substring(0,2), sb.toString());}else {map.put(String.valueOf(phoneInteger.get(i)).substring(0,2), "");} map.put(String.valueOf(phoneInteger.get(i)).substring(0,2), "");sb =new StringBuffer();sb.append(String.valueOf(phoneInteger.get(i)).substring(2)+",");}else {sb.append(String.valueOf(phoneInteger.get(i)).substring(2)+",");}if(i+1==phoneInteger.size()) {map.put(String.valueOf(phoneInteger.get(i)).substring(0,2), sb.toString());}}StringBuffer sb2 =new StringBuffer();map.forEach((k1,v)->{ String [] vs=v.split(",");String k=k1.substring(1);if(vs.length==1) {sb2.append("|"+k+v.replace(",","")+"");}else {int count =0;//出现连续的数字的个数int index =0;//记录每一段出现boolean flag =true;//整理连续的for(int i=1;i<vs.length;i++) {if(Integer.valueOf(vs[i])-Integer.valueOf(vs[i-1])==1) {count++;if(flag) {flag=false;index=i-1;}}else {flag=true;if(count>1) {sb2.append("|("+k+"["+vs[index]+"-"+vs[i-1]+"])");for(;index<i;index++) {vs[index]="A";}}count=0;}}if(count>1) {sb2.append("|("+k+"["+vs[index]+"-"+vs[vs.length-1]+"])");for(;index<vs.length;index++) {vs[index]="A";}}//整理不连续的flag =true;for(int i=0;i<vs.length;i++) {if(!"A".equals(vs[i])) {if(flag) {flag =false;sb2.append("|("+k+"[");}sb2.append(vs[i]+"|");}}if(!flag) {sb2.delete(sb2.length()-1,sb2.length());sb2.append("])");}} });sb2.delete(0, 1);System.out.println("优化的结果的结果:^1("+sb2.toString()+")\\\\d{8}$");return "^1("+sb2.toString()+")\\d{8}$";}
}
运行结果
枚举结果,好逊:(13[0|1|2|3|4|5|6|7|8|9])|(14[0|5|6|7|9])|(15[0|1|2|3|5|6|7|8|9])|(16[6])|(17[2|3|5|6|7|8])|(18[0|1|2|3|4|5|6|7|8|9])|(19[1|3|5|6|7|8|9])
优化的结果的结果:^1((3[0-9])|(4[5-7])|(4[0|9])|(5[0-3])|(5[5-9])|66|(7[5-8])|(7[2|3])|(8[0-9])|(9[5-9])|(9[1|3]))\\d{8}$
true
最新手机号正则表达式,及生成程序相关推荐
- 允许为空的手机号正则表达式
最新手机号正则表达式:^((17[0-9])|(14[0-9])|(13[0-9])|(15[^4,\D])|(19[^4,\D])|(18[0,1,2,5-9]))\d{8}$ 可以为空的手机号正则 ...
- 手机号最新的正则表达式验证(截止2018-03-31)
转:https://www.jianshu.com/p/18a245600468 /*** 手机号最新的正则表达式验证* * 移动:134-139,147(上网卡),150-152,157-159,1 ...
- Java 常用正则表达式,Java正则表达式,Java身份证校验,最新手机号码校验正
Java 常用正则表达式,Java正则表达式,Java身份证校验,最新手机号码校验正则表达式 ============================== ©Copyright 蕃薯耀 2017年10 ...
- Java 常用正则表达式,Java正则表达式,Java身份证校验,最新手机号码正则表达式...
Java 常用正则表达式,Java正则表达式,Java身份证校验,最新手机号码校验正则表达式 ============================== ©Copyright 蕃薯耀 2017年11 ...
- Android最新手机号正则判断(含最新166/198/199开头的手机号)
Android最新手机号正则判断(含最新166/198/199开头的手机号) /*** 匹配手机号的规则:[3578]是手机号第二位可能出现的数字*/ public static final Stri ...
- 最新手机号段归属地数据库(2017年4月16日版)免费下载
2017年4月16日版 360569条记录 最新 手机号段数据库 号码归属地数据库 移动号段 联通号段 电信号段 14号段 170号段(虚拟运营商) 权威 全面 准确 规范 字段包括 ...
- 手机号正则表达式校验,兼容+86,空格和-分隔符等常规手机格式
手机号正则表达式校验 背景 前一段时间在用蜂巢取快递的时候,我输入199号段,发现提示我手机号错误,导致我无法注册使用蜂巢功能. 最近有空了,打算写一篇关于手机号校验的文章,和大家交流交流.现在网上的 ...
- 最新手机号段归属地数据库 2019年6月版 430826条记录
2019年6月1日版 430826条记录 最新 手机号段数据库 号码归属地数据库 移动号段 联通号段 电信号段 170 171 号段(虚拟运营商) 权威 全面 准确 规范 字段包括 省份 城市 运营商 ...
- mysql手机号段地区库_最新手机号段归属地数据库 2019年12月版 441831条记录
2019年12月1日版 441831条记录 最新 手机号段数据库 号码归属地数据库 移动号段 联通号段 电信号段 170 171 号段(虚拟运营商) 权威 全面 准确 规范 字段包括 省份 城市 运营 ...
最新文章
- visual studio asmx 调试_通过Windows Visual Studio远程调试WSL2中的.NET Core Linux应用程序...
- 使用joda-time工具类 计算时间相差多少 天,小时,分钟,秒
- 开发者福利,BCH通用数据库Bitdb 2.0来了
- python保存代码需要删除头部信息吗_用python删除java文件头上版权信息的方法
- 计算机文化基础课程总结,计算机文化基础课程总结.docx
- java 创建日程到期提醒_日程管理工具—Things 3
- dedian系统云服务器,云服务器选择Ubuntu还是Debian镜像系统?根据熟悉度选择
- 利用语义分割对木薯根坏死进行评分
- Bailian3468 电池的寿命【贪心】
- Tencent笔试题收集
- java 线程安全集合
- 文件传至迅雷服务器,迅雷传输SDK开发文档
- 复合型网络拓扑结构图_网络拓扑结构图知识
- kotlin写android,Kotlin安卓开发
- 网络舆情如何有效预警的方式方法详解
- 链表结点的物理顺序与逻辑顺序
- HP笔记本win10不能使用U盘,且无安全选项卡解决方法
- Win系统 - 单通道 16G 内存 VS 双通道 16G 内存
- 中国氯吡脲市场运营分析及项目投资策略建议报告2022-2028年版
- 1048. 数字加密(20)