/**
* 手机号码
* 移动: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);
}
Java 检测字符是否存在手机号或返回该手机号
最新推荐文章于 2024-09-15 19:46:31 发布