首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Java 手機號碼正則驗證:最新號段支援與預編譯優化

     編輯:Java 程式設計入門

核心正則(支援 2024 年主流號段)

private static final Pattern MOBILE_PATTERN = Pattern.compile(
    "^(?:(?:\\+86|86)?1(?:3\\d|4[5-9]|5[0-35-9]|6[2567]|7[0-8]|8\\d|9[0-9])\\d{8})$"
);

號段解析

前綴運營商/類型範例
13x移動/聯通/電信130-139
14[5-9]衛星/物聯網145-149
15[0-35-9]移動/聯通/電信(除 154)150-153,155-159
16[2567]電信/聯通 5G/物聯網162,165-167
17[0-8]虛擬運營商/物聯網170-178
18x移動/聯通/電信180-189
19[0-9]5G 新號段190-199

驗證方法

public static boolean isMobile(String mobile) {
    if (mobile == null) return false;
    return MOBILE_PATTERN.matcher(mobile).matches();
}

// 允許空格/分隔符的寬鬆版
public static boolean isMobileLoose(String mobile) {
    if (mobile == null) return false;
    String clean = mobile.replaceAll("[\\s-]", "");
    return MOBILE_PATTERN.matcher(clean).matches();
}

效能優化

  • 靜態預編譯:Pattern.compile 只執行一次,避免重複編譯開銷
  • 非捕獲組:(?:...) 減少分組開銷
  • 錨點 ^$:確保全匹配,避免部分匹配誤判

測試用例

String[] tests = {
    "13800138000", "15912345678", "19988888888", // 有效
    "12800138000", "1380013800",  "138-0013-8000", // 無效/需清洗
    "+8613800138000", "8613800138000"             // 含國碼
};
for (String t : tests) System.out.println(t + " -> " + isMobile(t));

進階:工信部官方號段數據源同步

生產環境建議定期從 工信部 或三大運營商公開接口拉取最新號段,動態生成正則或使用 Trie 樹匹配,確保 100% 覆蓋。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved