1. 程式人生 > >Java正則表示式判斷手機號是否合法

Java正則表示式判斷手機號是否合法

首先我們要搞清楚現在已經開放了多少個號碼段,國家號碼段分配如下:
移動:134、135、136、137、138、139、150、151、157(TD)、158、159、187、188
聯通:130、131、132、152、155、156、185、186
電信:133、153、180、189、(1349衛通)

剩下的就是寫正則表示式進行匹配了,如下:

package com.example.offline;

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

/**
 * 
 * @author FX_SKY
 *
 */
public class PhoneTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String telNum = "10086";
		boolean flag = isMobiPhoneNum(telNum);
		System.out.println("telNum "+telNum +" isMobiPhoneNum "+flag);
		
		telNum = "13611503575";
		flag = isMobiPhoneNum(telNum);
		System.out.println("telNum "+telNum +" isMobiPhoneNum "+flag);
	}
	
	/**
	 * 通用判斷
	 * @param telNum
	 * @return
	 */
	public static boolean isMobiPhoneNum(String telNum){
		String regex = "^((13[0-9])|(15[0-9])|(18[0-9]))\\d{8}$";
        Pattern p = Pattern.compile(regex,Pattern.CASE_INSENSITIVE);
        Matcher m = p.matcher(telNum);
        return m.matches();
	}
	
	/**
	 * 更嚴格的判斷
	 * @param mobiles
	 * @return
	 */
	public static boolean isMobileNum(String telNum){
		Pattern p = Pattern.compile("^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$");
		Matcher m = p.matcher(telNum);
		return m.matches();
	}
}

這裡提供了兩種判斷方法,第一種方法更寬泛一些,第二種方法較第一種方法更嚴格一些,去除了154號段;大家可以根據專案需要進行選用。