Java正則表示式判斷手機號是否合法
阿新 • • 發佈:2018-12-31
首先我們要搞清楚現在已經開放了多少個號碼段,國家號碼段分配如下:
移動: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衛通)
這裡提供了兩種判斷方法,第一種方法更寬泛一些,第二種方法較第一種方法更嚴格一些,去除了154號段;大家可以根據專案需要進行選用。
移動: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號段;大家可以根據專案需要進行選用。