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

   /**
    * 手机号码
    * 移动: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));
    }


    public static void main(String[] args) {
        String aaaa = "fdgfdfgdfgf195225  17887dgdfgd1857-----84-*8/*7*-5*96*789798sdsggfd";
        nickName = checkNickName(aaaa, 2);
        System.out.println(nickName);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值