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

빈 입력값도 허용하는 이메일 유효성 검사 Java 정규식 프로그램

빈 필드를 포함한 이메일 유효성 검사 정규식

일반적으로 이메일 유효성 검사 시 입력값이 반드시 존재해야 하지만, 경우에 따라 빈 문자열(공백 입력)도 유효한 값으로 허용해야 할 때가 있습니다. 아래 정규식은 일반적인 이메일 형식과 빈 입력값을 모두 매칭합니다.

^([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6})?$

정규식 구성 요소 설명

  • ^ : 문자열의 시작을 의미합니다.

  • [a-zA-Z0-9._%+-] : @ 기호 앞에서 영문 알파벳(대소문자), 숫자, 그리고 "+", "_", ".", "%", "-" 중 한 글자와 매칭됩니다.

  • + : 앞서 언급한 문자 집합이 1회 이상 반복될 수 있음을 나타냅니다.

  • @ : @ 기호 자체와 매칭됩니다.

  • [a-zA-Z0-9.-] : @ 기호 뒤에서 영문 알파벳(대소문자), 숫자, ".", "-" 중 한 글자와 매칭됩니다.

  • \.[a-zA-Z]{2,6} : 도메인의 마지막 마침표(.) 뒤에 오는 2~6글자의 최상위 도메인(com, net, kr 등)을 매칭합니다.

  • $ : 문자열의 끝을 의미합니다.

  • (...)? : 괄호 안의 전체 패턴이 0회 또는 1회 출현할 수 있음을 의미하며, 이 덕분에 빈 입력값도 유효하게 처리됩니다.

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

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class SampleTest {
   public static void main( String args[] ) {
      String regex = "^([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6})?$";
      // 사용자로부터 입력 받기
      Scanner sc = new Scanner(System.in);
      System.out.println("Enter your name: ");
      String name = sc.nextLine();
      System.out.println("Enter your e-mail: ");
      String e_mail = sc.nextLine();
      System.out.println("Enter your age: ");
      int age = sc.nextInt();
      // Pattern 클래스 인스턴스 생성
      Pattern pattern = Pattern.compile(regex);
      // Matcher 클래스 인스턴스 생성
      Matcher matcher = pattern.matcher(e_mail);
      // 매칭 여부 확인
      if(matcher.find()) {
         System.out.println("e-mail value accepted");
      } else {
         System.out.println("e-mail not value accepted");
      }
   }
}

실행 결과 1 (빈 이메일 입력)

Enter your name:
krishna
Enter your e-mail:
Enter your age:
20
e-mail value accepted

위 실행 결과처럼 이메일을 입력하지 않고 넘어가도 정규식의 선택적 그룹(? ) 덕분에 유효한 것으로 판단됩니다.

실행 결과 2 (정상적인 이메일 입력)

Enter your name:
Rajeev
Enter your e-mail:
rajeev.123@gmail.com
Enter your age:
25
e-mail value accepted

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

Pattern과 Matcher 클래스를 직접 사용하지 않고, String 클래스가 제공하는 matches() 메서드를 이용하면 더 간결하게 코드를 작성할 수 있습니다.

import java.util.Scanner;
public class Example {
   public static void main(String args[]) {
      // 사용자로부터 문자열 입력 받기
      System.out.println("Enter email address: ");
      Scanner sc = new Scanner(System.in);
      String e_mail = sc.nextLine();
      // 정규식 정의
      String regex = "^([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6})?$";
      boolean result = e_mail.matches(regex);
      if(result) {
         System.out.println("Valid match");
      } else {
         System.out.println("Invalid match");
      }
   }
}

실행 결과 1 (정상적인 이메일 입력)

Enter email address:
rajeev.123@gmail.com
Valid match

실행 결과 2 (빈 이메일 입력)

Enter email address:
Valid match

마무리

핵심은 정규식 전체를 괄호로 묶고 ? 수량자를 붙여 이메일 패턴을 선택적(optional)으로 만든 것입니다. 이렇게 하면 올바른 이메일 형식과 빈 문자열 두 가지 경우만 통과되며, 그 외 잘못된 형식은 모두 거부됩니다. 실무에서는 폼의 필수 여부에 따라 이 정규식을 적절히 활용하면 유연한 유효성 검사 로직을 구현할 수 있습니다.