/**
    * 手机号码
    * 移动:134[0-8],135,136,137,138,139,150,151,157,158,159,182,187,188
    * 联通:130,131,132,152,155,156,185,186
    * 电信:133,1349,153,180,189,181(增加)
    */
    private static final String PHONE_ALL = "^1(3[0-9]|5[0-35-9]|8[025-9])\\d{8}$";
    /**
        * 中国移动:China Mobile
     * 134[0-8],135,136,137,138,139,150,151,157,158,159,182,187,188
     */
    private static final String PHONE_MOBILE = "^1(34[0-8]|(3[5-9]|5[017-9]|8[2378])\\d)\\d{7}$";
    /**
        * 中国联通:China Unicom
     * 130,131,132,152,155,156,185,186
     */
    private static final String PHONE_UNICOM = "^1(3[0-2]|5[256]|8[56])\\d{8}$";
    /**
     * 中国电信:China Telecom
     * 133,1349,153,180,189,181(增加),199
     */
    private static final String PHONE_TELECOM = "^1((33|53|99|8[019])[0-9]|349)\\d{7}$";

/**
     * @function 检测该字符串是否包含手机号
     * @author zhaoxutao
     * @date 2019年8月19日 11:10
     * @param String
     * @return boolean true:包含,false:无
     * @version 2.0.2
     */
    public static boolean checkIncludePhone(String str) {
        if (StringUtils.isBlank(str)) {
            return true;
        }
        return (boolean) checkNickName(str,1);
    }
    
    /**
     * @function 获取该字符串中的手机号
     * @author zhaoxutao
     * @date 2019年8月19日 11:10
     * @annotation 该方法返回多个手机号
     * @param String
     * @return String 返回手机号
     * @version 2.0.2
     */    
    @SuppressWarnings("unchecked")
    public static List<String> checkGetPhone(String str) {
        if (StringUtils.isBlank(str)) {
            return null;
        }
        return (List<String>) checkNickName(str,2);
    }
    
    /**
         * 检查昵称是否包括手机号
     * @param String 校验字符 type 1:返回Boolean 2:返回手机号
     * @return 包括:true:null
     */
    private static Object checkNickName(String nickName,int type) {

// 过滤出纯数字
       nickName = Pattern.compile("[^0-9]").matcher(nickName.trim()).replaceAll("");
       List<String> list = new ArrayList<String>();
       if (nickName.length() < 11) {
          return type==1?false:list;
       }
       char[] chars = nickName.toCharArray();
       ArrayList<String> phoneList = new ArrayList<>();//所有11位数字的集合
       for(int i = 0; i < chars.length; i++){
          StringBuilder stringBuilder = new StringBuilder();
          for(int j = 0; j < 11; j++){
             if(i + j < chars.length){
                stringBuilder.append(chars[i + j]);
             }
          }
          if(stringBuilder.length()==11){
             phoneList.add(stringBuilder.toString());
          }
       }
       List<String> regexList = new ArrayList<String>();

regexList.add(PHONE_ALL);
       regexList.add(PHONE_MOBILE);
       regexList.add(PHONE_UNICOM);
       regexList.add(PHONE_TELECOM);
       for(String phone : phoneList){
          for (String regex : regexList) {
             Pattern pattern = Pattern.compile(regex);
             Matcher matcher = pattern.matcher(phone);
             if (matcher.matches()) {
                 if (type == 1) {
                    return true;
                 }else {
                     list.add(phone);
                 }
             }
          }
       }
       return type==1?false:new ArrayList<>(new HashSet<>(list));
    }

Java 检测字符是否存在手机号或返回该手机号相关推荐

  1. java utf-8字符表_Java中的ASCII、Unicode和UTF-8字符编码集

    首先讲一下几种字符的编码方式: 1. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串.每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态 ...

  2. Java IO: 字符流的Piped和CharArray

    转载自   Java IO: 字符流的Piped和CharArray 作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) 本章节将简要介绍管道与字符数组相 ...

  3. java判断是否第一次出现_利用java判断字符首次出现的位置,java替换最后一个特定字符...

    利用java判断字符首次出现的位置利用爪哇判断字符首次出现的位置, 目的: (学习视频分享:java视频教程 实现代码如下: 导入Java.util.收藏品: 导入Java.util.LinkedLi ...

  4. java的字符定义_Java字符串定义及常用方法

    String.StringBuffer和StringBuilder String修饰的是不可变的字符串,而StringBuffer和StringBuilder类的对象是可以被修改的. StringBu ...

  5. java 检测目录下的文件_如何在Java中检查文件是目录还是文件

    java 检测目录下的文件 java.io.File class contains two methods using which we can find out if the file is a d ...

  6. java字符串字符排列组合_如何在Java中查找字符串的所有排列

    java字符串字符排列组合 In this tutorial, we will learn how to find the permutation of a String in a Java Prog ...

  7. 【JAVA】-- 字符流(Reader、Writer)

    InputStream和OutputStream类在读写文件时操作的都是字节,如果希望在程序中操作字符,则可以使用字符流:FileReader对象返回的字符流是char,而InputStream对象返 ...

  8. java 字节流 字符流 的详细介绍

    1.IO流 1.1 IO流的概念 我们把数据的传输,可以看成一种数据的流动,按照流动的方向,以内存为基准,分为输入input和输出output,即流向内存的是输入流,流出内存的叫输出流. java中I ...

  9. java验证字符是否为字母_Java程序检查字符是否为字母

    Java程序检查字符是否为字母 在此程序中,您将学习检查给定字符是否为字母.这是使用Java中的if...else语句或三元运算符完成的. 示例1:使用if...else语句检查字母的Java程序 p ...

  10. java 检测表情符号_关于Java:检查字母是否为表情符号

    我想检查字母是否是表情符号. 我发现了一些类似的问题,并找到了这个正则表达式: private final String emo_regex ="([\\u20a0-\\u32ff\\ud8 ...

最新文章

  1. ASP.NET 2.0 读取配置文件[INI](示例代码下载)
  2. The “data“ option should be a function that returns a per-instance value in component definitions
  3. iphone闪退修复工具_iOS14到底怎么样?汇总2866部iPhone的升级体验
  4. 记忆化搜索 codevs 2241 排序二叉树
  5. 在eclipse里如何快速定位到某一行?
  6. html 前端传数据流,jquery – 使用Node.js流式传输数据
  7. android获取网络视频缩略图,Android 获取缩略图,网络视频,或者本地视频
  8. 线程池的使用与没使用的区别
  9. java语言生日蛋糕代码_AcWing 168. 【Java】生日蛋糕
  10. Ubuntu18.04之星际译王及辞典
  11. BS CS 优缺点比较 及 适应场合 (部分转载+个人见解)
  12. Python科学计算和数据分析库简介
  13. 主流H5、Js 3D游戏引擎和框架
  14. 3文聚焦:RNA m6A甲基化修饰在不同农作物中的研究进展(马铃薯+水稻+玉米+小麦)|易基因
  15. 【BurpSuite学习篇】四:Scanner 漏洞扫描模块
  16. JavaScript:Promise进阶知识
  17. html5 css3 图片画廊,js和CSS3 3D立方体图片画廊特效
  18. 【BZOJ】4292: [PA2015]Równanie
  19. 嵌入式(二十):并行接口
  20. Java批量建立文件夹

热门文章

  1. 自学PLC编程如何找资源
  2. SLAM和SFM有什么区别?
  3. python自动翻译视频字幕_python自动翻译实现方法
  4. redis集群原理及搭建
  5. Windows平台安装flutter之初体验(安装教程)
  6. VSF表格 粘贴板ClipBoard 将数据粘贴到表格 VB6.0
  7. c语言均衡器,拿什么拯救你的音色——初识均衡器
  8. RedHat配置阿里yum源
  9. 基于html5的旅游网站的设计与实现,基于HTML5的旅游网站的设计与实现(静态网页)(含录像)...
  10. 计算机实验室安全员责任书,实验室安全目标责任书