手机号正则校验表达式该更新啦

今天有个同事调休,他负责的一个项目出现了一点问题,有用户反馈他的手机号总是获取不到信息,我让他提供了一下手机号,是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}$/)
发布了194 篇原创文章 · 获赞 20 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/weixin_39309402/article/details/104016250
今日推荐