手机号会存在加区号/国际ip号的问题,如+861585173214二、00861585173214二、17951158517332142或者0158517321142,上面几个号码实际都是同一个号码,但加了不一样的前缀。程序中会将上面几种状况视为同一个号码,具体逻辑以下:java
java参考代码code
...... String tel = "+008613701234567"; //手机号正则 String reg = "^[0-9\\+]*?1[3456789]\\d{9}$"; Pattern pattern = Pattern.compile(reg); Matcher matcher = null; //过滤非数字字符 如 158-517 234 34 =》 15851723434 tel = tel.replaceAll("\\D", ""); //匹配手机号 matcher = pattern.matcher(tel); if(tel.length() >= 11 && matcher.find()){ tel = tel.substring(tel.length() - 11); }else if(tel.length()>=7){//固话号码(区号+7/8位)、未匹配到的手机号 tel=tel.substring(tel.length()-7); } ......
注:按照上述逻辑仅适用于查询后的处理(去重等),不可用于处理入库前的号码数据。由于,8位的固话号码(或正则未匹配到的手机号码)会被截取为7位,处理后的号码再也不可拨打。blog