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

Java 정규식(Regex)으로 이메일 주소 유효성 검사하는 방법

사용자 입력값을 다루는 애플리케이션에서 이메일 주소가 올바른 형식인지 확인하는 것은 매우 중요한 검증 절차입니다. 자바에서는 java.util.regex 패키지를 활용하면 정규식 기반으로 손쉽게 이메일 주소의 유효성을 검사할 수 있습니다.

이메일 주소 검증용 정규식

다음은 일반적인 이메일 주소 형식과 일치하는 정규식 표현식입니다.

"^[\\w!#$%&'*+/=?`{|}~^-]+(?:\\.[\\w!#$%&'*+/=?`{|}~^-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,6}$"

이 정규식은 크게 세 부분으로 구성됩니다.
1. 로컬 파트(@ 앞부분): 영숫자, 밑줄, 그리고 !#$%&'*+/=?`{|}~^- 등의 특수문자를 허용하며, 마침표(.)로 구분된 반복 구조도 지원합니다.
2. 도메인 부분: 영숫자와 하이픈(-)으로 이루어진 도메인 이름 뒤에 마침표(.)가 하나 이상 반복됩니다.
3. 최상위 도메인(TLD): 2자 이상 6자 이하의 알파벳으로 끝나야 합니다.

예제 코드

아래 예제는 사용자로부터 문자열을 입력받아 위 정규식과 비교한 후, 이메일 형식에 부합하는지 여부를 콘솔에 출력합니다.

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

public class EmailValidator {
    public static void main(String args[]) {
        // 사용자로부터 문자열 입력 받기
        System.out.println("문자열을 입력하세요");
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();

        // 이메일 주소 검증용 정규식
        String regex = "^[\\w!#$%&'*+/=?`{|}~^-]+(?:\\.[\\w!#$%&'*+/=?`{|}~^-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,6}$";

        // 정규식 컴파일
        Pattern pattern = Pattern.compile(regex);

        // Matcher 객체 생성
        Matcher matcher = pattern.matcher(input);

        if(matcher.matches()) {
            System.out.println("유효한 이메일 주소입니다.");
        } else {
            System.out.println("유효하지 않은 이메일 주소입니다.");
        }
    }
}

실행 결과

올바른 이메일 주소를 입력했을 때의 실행 결과는 다음과 같습니다.

문자열을 입력하세요
sample.123@gmail.com
유효한 이메일 주소입니다.

동작 원리 요약

1. Pattern.compile() 메서드로 정규식을 컴파일하여 Pattern 객체를 생성합니다.
2. pattern.matcher(input)을 호출해 입력 문자열과 비교할 Matcher 객체를 얻습니다.
3. matcher.matches() 메서드는 입력 문자열 전체가 정규식 패턴과 완전히 일치하는 경우 true를 반환합니다.

이처럼 정규식을 활용하면 별도의 외부 라이브러리 없이도 자바 표준 API만으로 이메일 형식 검증 로직을 간결하게 구현할 수 있습니다. 실무에서는 더 엄격한 RFC 5322 표준 준수가 필요한 경우 Apache Commons Validator 같은 검증 라이브러리를 함께 고려해 보는 것도 좋습니다.