Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java 정규식으로 유효한 휴대폰 번호 검증하기 – 예제 코드와 실행 결과

핵심 개념 정리

다음 정규식을 사용하면 입력받은 휴대폰 번호가 유효한지 간단하게 확인할 수 있습니다.

"\\d{10}"
  • 일반적으로 유효한 휴대폰 번호는 10자리 숫자로 구성됩니다(인도 기준).
  • 메타 문자 \d는 0부터 9까지의 숫자 한 자리와 일치합니다.
  • 수량자 {n}은 앞의 표현식이 정확히 n번 반복됨을 의미합니다. 따라서 \d{10}은 '숫자가 연속해서 10개 나열된 문자열'과 일치합니다.

예제 1: Pattern·Matcher 클래스 활용

java.util.regex 패키지의 Pattern 클래스로 정규식을 컴파일하고, Matcher 객체를 통해 입력값과 비교하는 방식입니다. 동일한 패턴을 반복해서 사용할 때 성능상 유리하며, 정규식 처리 과정을 단계별로 제어할 수 있다는 장점이 있습니다.

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

public class PhoneNumberExample {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("이름을 입력하세요: ");
        String name = sc.nextLine();
        System.out.println("휴대폰 번호를 입력하세요: ");
        String phone = sc.next();
        // 유효한 휴대폰 번호를 검사하는 정규식
        String regex = "\\d{10}";
        // Pattern 객체 생성
        Pattern pattern = Pattern.compile(regex);
        // Matcher 객체 생성
        Matcher matcher = pattern.matcher(phone);
        // 입력된 휴대폰 번호의 유효성 검증
        if (matcher.matches()) {
            System.out.println("입력한 휴대폰 번호는 유효합니다.");
        } else {
            System.out.println("입력한 휴대폰 번호는 유효하지 않습니다.");
        }
    }
}

실행 결과 1 (유효한 번호)

이름을 입력하세요:
krishna
휴대폰 번호를 입력하세요:
9848022338
입력한 휴대폰 번호는 유효합니다.

실행 결과 2 (자릿수 부족)

이름을 입력하세요:
krishna
휴대폰 번호를 입력하세요:
5465
입력한 휴대폰 번호는 유효하지 않습니다.

실행 결과 3 (자릿수 초과)

이름을 입력하세요:
krishna
휴대폰 번호를 입력하세요:
984802354655
입력한 휴대폰 번호는 유효하지 않습니다.

예제 2: String.matches() 메서드 활용

패턴을 한 번만 사용한다면 String 클래스의 matches() 메서드를 이용하는 것이 코드가 훨씬 간결합니다. 내부적으로는 동일한 정규식 엔진을 사용하며, 별도의 import 없이 문자열에서 바로 검증할 수 있습니다.

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("휴대폰 번호를 입력하세요: ");
        String phone = sc.next();
        // 유효한 휴대폰 번호를 검사하는 정규식
        String regex = "\\d{10}";
        // 입력된 번호를 정규식과 비교
        boolean result = phone.matches(regex);
        if (result) {
            System.out.println("입력한 휴대폰 번호는 유효합니다.");
        } else {
            System.out.println("입력한 휴대폰 번호는 유효하지 않습니다.");
        }
    }
}

실행 결과 1 (유효한 번호)

휴대폰 번호를 입력하세요:
9848022338
입력한 휴대폰 번호는 유효합니다.

실행 결과 2 (자릿수 부족)

휴대폰 번호를 입력하세요:
123
입력한 휴대폰 번호는 유효하지 않습니다.

실행 결과 3 (자릿수 초과)

휴대폰 번호를 입력하세요:
123654788755
입력한 휴대폰 번호는 유효하지 않습니다.

마치며: 실무 적용 팁

위의 \d{10} 패턴은 '정확히 10자리 숫자'만 허용하므로, 하이픈(-)이나 공백이 포함된 번호, 국가 코드(+82 등)가 붙은 번호는 유효하지 않은 것으로 판단됩니다. 실제 서비스에서는 요구되는 형식에 맞게 정규식을 확장해야 합니다. 예를 들어 한국 휴대폰 번호(010-XXXX-XXXX 형식)를 검증하려면 다음과 같은 패턴을 사용할 수 있습니다.

^01(?:0|1|[6-9])-(?:\d{3}|\d{4})-\d{4}$

또한 matches()는 문자열 전체가 패턴과 일치해야 true를 반환하므로, 문자열의 일부만 검사하고 싶다면 Matcher의 find() 메서드를 사용하거나 앵커(^, $)를 상황에 맞게 조절하는 것이 좋습니다.