手机号码相关正则表达式

import java.util.regex.Matcher;   
import java.util.regex.Pattern;  
public class CheckPhoneUtils {

	/** 电话格式验证 **/
	private static final String PHONE_CALL_PATTERN = "^(\\(\\d{3,4}\\)|\\d{3,4}-)?\\d{7,8}(-\\d{1,4})?$";

	/**
	 * 中国电信号码格式验证 手机段: 133,153,180,181,189,177,1700
	 **/
	private static final String CHINA_TELECOM_PATTERN = "(^1(33|53|77|8[019])\\d{8}$)|(^1700\\d{7}$)";

	/**
	 * 中国联通号码格式验证 手机段:130,131,132,155,156,185,186,145,176,1709
	 **/
	private static final String CHINA_UNICOM_PATTERN = "(^1(3[0-2]|4[5]|5[56]|7[6]|8[56])\\d{8}$)|(^1709\\d{7}$)";

	/**
	 * 中国移动号码格式验证
	 * 手机段:134,135,136,137,138,139,150,151,152,157,158,159,182,183,184
	 * ,187,188,147,178,1705
	 **/
	private static final String CHINA_MOBILE_PATTERN = "(^1(3[4-9]|4[7]|5[0-27-9]|7[8]|8[2-478])\\d{8}$)|(^1705\\d{7}$)";

	/**
	 * 验证电话号码的格式 
	 * @param str
	 *            校验电话字符串
	 * @return 返回true,否则为false
	 */
	public static boolean isPhoneCallNum(String str) {

		return str == null || str.trim().equals("") ? false : match(PHONE_CALL_PATTERN, str);
	}

	/**
	 * 验证【电信】手机号码的格式
	 * @param str
	 *            校验手机字符串
	 * @return 返回true,否则为false
	 */
	public static boolean isChinaTelecomPhoneNum(String str) {

		return str == null || str.trim().equals("") ? false : match(CHINA_TELECOM_PATTERN, str);
	}

	/**
	 * 验证【联通】手机号码的格式
	 * @param str
	 *            校验手机字符串
	 * @return 返回true,否则为false
	 */
	public static boolean isChinaUnicomPhoneNum(String str) {

		return str == null || str.trim().equals("") ? false : match(CHINA_UNICOM_PATTERN, str);
	}

	/**
	 * 验证【移动】手机号码的格式
	 * @param str
	 *            校验手机字符串
	 * @return 返回true,否则为false
	 */
	public static boolean isChinaMobilePhoneNum(String str) {

		return str == null || str.trim().equals("") ? false : match(CHINA_MOBILE_PATTERN, str);
	}

	/**
	 * 验证手机和电话号码的格式
	 * @param str
	 *            校验手机字符串
	 * @return 返回true,否则为false
	 */
	public static boolean isPhoneNum(String str) {
		// 如果字符串为空,直接返回false
		if (str == null || str.trim().equals("")) {
			return false;
		} else {
			int comma = str.indexOf(",");// 是否含有逗号
			int caesuraSign = str.indexOf("、");// 是否含有顿号
			int space = str.trim().indexOf(" ");// 是否含有空格
			if (comma == -1 && caesuraSign == -1 && space == -1) {
				// 如果号码不含分隔符,直接验证
				str = str.trim();
				return (isPhoneCallNum(str) || isChinaTelecomPhoneNum(str) || isChinaUnicomPhoneNum(str)
						|| isChinaMobilePhoneNum(str)) ? true : false;
			} else {
				// 号码含分隔符,先把分隔符统一处理为英文状态下的逗号
				if (caesuraSign != -1) {
					str = str.replaceAll("、", ",");
				}
				if (space != -1) {
					str = str.replaceAll(" ", ",");
				}

				String[] phoneNumArr = str.split(",");
				// 遍历验证
				for (String temp : phoneNumArr) {
					temp = temp.trim();
					if (isPhoneCallNum(temp) || isChinaTelecomPhoneNum(temp) || isChinaUnicomPhoneNum(temp)
							|| isChinaMobilePhoneNum(temp)) {
						continue;
					} else {
						return false;
					}
				}
				return true;
			}

		}

	}

	/**
	 * 执行正则表达式
	 * 
	 * @param pat
	 *            表达式
	 * @param str
	 *            待验证字符串
	 * @return 返回true,否则为false
	 */
	private static boolean match(String pat, String str) {
		Pattern pattern = Pattern.compile(pat);
		Matcher match = pattern.matcher(str);
		return match.find();
	}

	public static void main(String[] args) {

		System.out.println(isPhoneNum("17750581369"));
		System.out.println(isPhoneNum("13306061248"));
		System.out.println(isPhoneNum("17750581369,13306061248"));
		System.out.println(isPhoneNum("17750581369 13306061248"));
		System.out.println(isPhoneNum("17750581369、13306061248"));
		System.out.println(isPhoneNum("0596-3370653"));

	}
}

更多详情,请关注我的博客https://highter.github.io

转载于:https://my.oschina.net/sssmile/blog/915314

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值