首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java 正則表達式驗證固定格式電話號碼:模式解析與代碼實現

     編輯:程式設計疑難解答

需求:驗證格式為 01-12345678 的電話號碼。規則如下:

  • 第一位固定為 0
  • 第二位為 1 或 2
  • 第三位為 1-9(非 0)
  • 連字符 -
  • 後 8 位均為數字 0-9

正則表達式構建

^0[12][1-9]-\d{8}$

逐段解析:

片段含義
^字符串開始
0字面字符 '0'
[12]字符集:'1' 或 '2'
[1-9]字符範圍:'1' 到 '9'
-字面字符 '-'(連字符)
\d{8}恰好 8 個數字(等價 [0-9]{8})
$字符串結束

Java 代碼實現

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

public class PhoneValidator {
    // 編譯一次,多次複用,效率更高
    private static final Pattern PHONE_PATTERN = Pattern.compile("^0[12][1-9]-\\d{8}$");

    public static boolean isValid(String phone) {
        if (phone == null) return false;
        Matcher matcher = PHONE_PATTERN.matcher(phone);
        return matcher.matches();
    }

    public static void main(String[] args) {
        String[] tests = {
            "01-12345678",  // true
            "02-98765432",  // true
            "01-02345678",  // false (第3位為0)
            "03-12345678",  // false (第2位非1/2)
            "01-1234567",   // false (不足8位)
            "01-123456789", // false (超過8位)
            "01-1234567a",  // false (含字母)
        };
        for (String s : tests) {
            System.out.printf("%-15s -> %b%n", s, isValid(s));
        }
    }
}

進階:提取區號與號碼

使用捕獲組:

private static final Pattern PHONE_PATTERN_GROUPS = Pattern.compile("^0([12])([1-9])-(\\d{8})$");

public static void parsePhone(String phone) {
    Matcher m = PHONE_PATTERN_GROUPS.matcher(phone);
    if (m.matches()) {
        String areaCode = "0" + m.group(1); // 01 或 02
        String prefix = m.group(2);         // 1-9
        String number = m.group(3);         // 8位號碼
        System.out.println("區號:" + areaCode + " 前綴:" + prefix + " 號碼:" + number);
    }
}

常見誤區

  • 忘記轉義反斜杠:Java 字符串中 \d 需寫成 \\d。
  • 使用 matcher.find() 而非 matches():前者匹配子串,後者匹配整串。
  • 未加 ^$ 錨點:導致 abc01-12345678def 也通過驗證。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved