핵심 개념 정리
다음 정규식을 사용하면 입력받은 휴대폰 번호가 유효한지 간단하게 확인할 수 있습니다.
"\\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() 메서드를 사용하거나 앵커(^, $)를 상황에 맞게 조절하는 것이 좋습니다.