java正则表达式判断分隔电话号码

package test;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class NumberUtil {
    //用于匹配手机号码
    private final static String REGEX_MOBILEPHONE = "^0?1[3458]\\d{9}$";
    //用于匹配固定电话号码
    private final static String REGEX_FIXEDPHONE = "^(010|02\\d|0[3-9]\\d{2})?\\d{6,8}$";
    //用于获取固定电话中的区号
    private final static String REGEX_ZIPCODE = "^(010|02\\d|0[3-9]\\d{2})(\\d{6,8}$)";

    private static Pattern PATTERN_MOBILEPHONE;
    private static Pattern PATTERN_FIXEDPHONE;
    private static Pattern PATTERN_ZIPCODE;

    static {
        PATTERN_FIXEDPHONE = Pattern.compile(REGEX_FIXEDPHONE);
        PATTERN_MOBILEPHONE = Pattern.compile(REGEX_MOBILEPHONE);
        PATTERN_ZIPCODE = Pattern.compile(REGEX_ZIPCODE);
    }

    /**
     * 判断是否为手机号码
     * 
     * @param number
     *            手机号码
     * @return
     */
    public static boolean isCellPhone(String number) {
        Matcher match = PATTERN_MOBILEPHONE.matcher(number);
        return match.matches();
    }

    /**
     * 判断是否为固定电话号码
     * 
     * @param number
     *            固定电话号码
     * @return
     */
    public static boolean isFixedPhone(String number) {
        Matcher match = PATTERN_FIXEDPHONE.matcher(number);
        return match.matches();
    }

    /**
     * 获取固定号码号码中的区号
     * 
     * @param strNumber
     * @return
     */
    public static String getZipFromHomephone(String strNumber) {
        Matcher matcher = PATTERN_ZIPCODE.matcher(strNumber);
        if (matcher.find()) {
            return matcher.group(1);
        }
        return null;
    }
    /**
     * 把固定电话按指定分隔符分隔
     * @param strNumber 固化号码
     * @param split 分隔符
     * @return
     */
    public static String getTransformedFixedPhone(String strNumber,String split) {
    	/**
    	 * 不是固定电话返回
    	 */
    	if(!isFixedPhone(strNumber)){
    		return strNumber;
    	}
    	//设置默认分隔符
    	if(split==null){
    		split="-";
    	}
        Matcher matcher = PATTERN_ZIPCODE.matcher(strNumber);
        //这里只有一个号码
        if (matcher.find()) {
            String temp1 =  matcher.group(1);//获取区号
            String temp2 =  matcher.group(2);//获取区号后的号码
            //加分隔符拼装
            return temp1+split+temp2;
        }
        return strNumber;
    }

    /**
     * 检查号码类型,并获取号码前缀,手机获取前7位,固话获取区号
     * @param number
     * @return
     */
    public static String checkNumber(String number){
    	if(number==null || "".equals(number.trim())){
    		return number;
    	}
    	if(isCellPhone(number)){
            //如果手机号码以0开始,则去掉0
            if(number.charAt(0) == '0'){
                number = number.substring(1);
            }
        }else if(isFixedPhone(number)){
        	number = getTransformedFixedPhone(number,null);
		}
    	return number;


    }

    public static void main(String[] args){
        String number = "02552160433";
        number = checkNumber(number);
        System.out.println(number);
        
        number = "013951699549";
        number = checkNumber(number);
        System.out.println(number);
        
        number = "051687189099";
        number = checkNumber(number);
        System.out.println(number);
        
        number = "52160433";
        number = checkNumber(number);
        System.out.println(number);
        
        number = "010112233";
        number = checkNumber(number);
        System.out.println(number);
    }
}
输出结果
025-52160433
13951699549
0516-87189099
52160433
010-112233 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值