今天有个同事调休,他负责的一个项目出现了一点问题,有用户反馈他的手机号总是获取不到信息,我让他提供了一下手机号,是1998785****,在查看了一下日志,发现提示手机号是错误格式!然后我找到了项目源码,发现他用的正则表达式是这样的:
public static boolean PhoneIsTrue(String phone) {
String regex = "^1[3|4|5|7|8][0-9]\\d{4,8}$"; // 正则匹配
boolean istrue = false;
if (phone.length() != 11) {
System.out.println("手机号应为11位数");
} else {
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(phone);
boolean isMatch = m.matches();
if (isMatch) {
istrue = true;
} else {
System.out.println("您的手机号" + phone + "是错误格式!!!");
}
}
return istrue;
}
public static void main(String[] args) {
// String str = "19987858313";
String str = "16687858313";
boolean phone = PhoneIsTrue(str);
System.out.println(phone);
}
然后一看该表达式,也太老了,16号段和19号段的号码,根本无法识别,只好帮他改表达式如下:
String regex = "^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])\\d{8}$";
// 需要注意的是 如果JS用该表达式 需要去掉一个斜杠 因为在Java中使用的,所以使用了双斜杠,防止\d转义
/**
* JS 使用
*/
"19987858313".match(/^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])\d{8}$/)