【Java】電話番号の判定を行う方法

この記事では、Javaを用いて電話番号の形式を検証する方法を紹介します。固定電話や携帯電話の形式を含め、正規表現を使用した効果的な検証方法を具体例とともに解説します。さらに、検証に加えて電話番号の形式を自動的に整形する方法も紹介します。

正規表現を使った電話番号の判定

以下のコードは、正規表現を使用して電話番号の形式を検証する方法を示しています。

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

/**
 * 電話番号検証
 * @param value 検証対象の値
 * @return 検証結果(true:電話番号、false:電話番号ではない)
 */
public static boolean isPhoneNumber(String value) {
    if (value == null || value.isEmpty()) {
        return false;
    }

    Pattern pattern = Pattern.compile("^(0\\d{1,4}-\\d{1,4}-\\d{4})|(070|080|090|050)-\\d{4}-\\d{4}$");
    return pattern.matcher(value).matches();
}

電話番号の整形

電話番号の検証に加えて、入力された番号を自動的に正しい形式に整形する機能も実装します。

/**
 * 電話番号整形
 * @param value 整形対象の値
 * @return 整形された電話番号
 */
public static String formatPhoneNumber(String value) {
    if (value == null || value.isEmpty()) {
        return value;
    }

    value = value.replaceAll("\\D", ""); // 非数字を削除

    if (value.matches("^0\\d{1,4}\\d{1,4}\\d{4}$")) {
        return value.replaceFirst("(\\d{1,4})(\\d{1,4})(\\d{4})", "0$1-$2-$3");
    } else if (value.matches("^(070|080|090|050)\\d{4}\\d{4}$")) {
        return value.replaceFirst("(\\d{3})(\\d{4})(\\d{4})", "$1-$2-$3");
    } else {
        return value; // 整形できない場合はそのまま返す
    }
}

動作確認

以下のコードは、さまざまな電話番号を検証して結果を出力します。

public static void main(String[] args) {
    String[] testNumbers = {
        "", null, "045-901-1234", "0166-25-5678", "04992-2-3456", "03-3264-7890",
        "0-12345-000", "01-123456-7890", "01-1234-abc0", "070-1234-5678",
        "080-8765-4321", "090-4321-8765", "050-9876-5432", "0120-123-456", "0332647890"
    };

    for (String number : testNumbers) {
        System.out.println("検証対象:" + number + " -> " + isPhoneNumber(number));
        System.out.println("整形後:" + number + " -> " + formatPhoneNumber(number));
    }
}

実行結果は以下のようになります。

検証対象: -> false
整形後: -> 
検証対象:null -> false
整形後:null -> null
検証対象:045-901-1234 -> true
整形後:045-901-1234 -> 045-901-1234
検証対象:0166-25-5678 -> true
整形後:0166-25-5678 -> 0166-25-5678
検証対象:04992-2-3456 -> true
整形後:04992-2-3456 -> 04992-2-3456
検証対象:03-3264-7890 -> true
整形後:03-3264-7890 -> 03-3264-7890
検証対象:0-12345-000 -> false
整形後:0-12345-000 -> 0-12345-000
検証対象:01-123456-7890 -> false
整形後:01-123456-7890 -> 01-123456-7890
検証対象:01-1234-abc0 -> false
整形後:01-1234-abc0 -> 01-1234-abc0
検証対象:070-1234-5678 -> true
整形後:070-1234-5678 -> 070-1234-5678
検証対象:080-8765-4321 -> true
整形後:080-8765-4321 -> 080-8765-4321
検証対象:090-4321-8765 -> true
整形後:090-4321-8765 -> 090-4321-8765
検証対象:050-9876-5432 -> true
整形後:050-9876-5432 -> 050-9876-5432
検証対象:0120-123-456 -> false
整形後:0120-123-456 -> 0120-123-456
検証対象:0332647890 -> false
整形後:0332647890 -> 03-3264-7890

まとめ

この記事では、Javaを使用して電話番号の形式を検証し、さらに自動的に整形する方法について紹介しました。正規表現を用いることで、簡単に電話番号の形式をチェックできますが、必要に応じてさらに厳密な検証を行うことも可能です。また、整形機能を加えることでユーザーの入力ミスを減らすことができます。