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

자바 정규식으로 문자열에 알파벳이 포함되어 있는지 확인하는 방법

알파벳 검증에 사용되는 정규식

입력받은 문자열이 영문 알파벳(대소문자)만으로 이루어져 있는지 확인할 때는 다음 정규식을 사용합니다.

"^[a-zA-Z]*$"

정규식을 구성하는 각 요소의 의미는 다음과 같습니다.

  • ^ : 문자열의 시작 위치를 나타냅니다.
  • [a-zA-Z] : 영문 소문자(a~z)와 대문자(A~Z) 한 글자를 매칭합니다.
  • * : 바로 앞의 패턴이 0번 이상 반복될 수 있음을 의미합니다.
  • $ : 문자열의 끝을 나타냅니다.

즉, 이 정규식은 문자열 전체가 처음부터 끝까지 오직 영문 알파벳으로만 구성된 경우에만 매칭됩니다. 숫자나 특수문자(#, _, . 등), 공백이 하나라도 포함되면 매칭에 실패합니다.

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

java.util.regex 패키지의 Pattern 클래스와 Matcher 클래스를 사용해 여러 개의 입력값을 한 번에 검사하는 예제입니다.

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

public class ContainsAlphabetExample {
   public static void main(String[] args) {
      Scanner sc = new Scanner(System.in);
      String names[] = new String[5];
      for(int i = 0; i < names.length; i++) {
         System.out.println("이름을 입력하세요: ");
         names[i] = sc.nextLine();
      }
      // 영문 알파벳만 허용하는 정규식
      String regex = "^[a-zA-Z]*$";
      // Pattern 객체 생성
      Pattern pattern = Pattern.compile(regex);
      for(String name : names) {
         // Matcher 객체 생성
         Matcher matcher = pattern.matcher(name);
         if(matcher.matches()) {
            System.out.println(name + " : 유효한 이름입니다.");
         } else {
            System.out.println(name + " : 유효하지 않은 이름입니다.");
         }
      }
   }
}

실행 결과

이름을 입력하세요:
krishna
이름을 입력하세요:
kasyap
이름을 입력하세요:
maruthi#
이름을 입력하세요:
Sai_Ram
이름을 입력하세요:
Vani.Viswanath
krishna : 유효한 이름입니다.
kasyap : 유효한 이름입니다.
maruthi# : 유효하지 않은 이름입니다.
Sai_Ram : 유효하지 않은 이름입니다.
Vani.Viswanath : 유효하지 않은 이름입니다.

알파벳으로만 이루어진 krishna와 kasyap은 검증을 통과했지만, 특수문자 #이 포함된 maruthi#, 밑줄(_)이 포함된 Sai_Ram, 마침표(.)가 포함된 Vani.Viswanath는 유효하지 않은 것으로 판별되었습니다.

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

Pattern 객체를 직접 생성하지 않고 String 클래스에서 기본 제공하는 matches() 메서드를 사용하면 코드를 훨씬 간결하게 작성할 수 있습니다.

import java.util.Scanner;

public class Just {
   public static void main(String[] args) {
      Scanner sc = new Scanner(System.in);
      System.out.println("이름을 입력하세요: ");
      String name = sc.nextLine();
      String regex = "^[a-zA-Z]*$";
      boolean result = name.matches(regex);
      if(result) {
         System.out.println("입력한 이름은 유효합니다.");
      } else {
         System.out.println("입력한 이름은 유효하지 않습니다.");
      }
   }
}

실행 결과

이름을 입력하세요:
vasu#dev
입력한 이름은 유효하지 않습니다.

#이 포함된 vasu#dev는 알파벳 외의 문자를 담고 있으므로 유효하지 않은 이름으로 판별됩니다.

참고 – 빈 문자열 처리와 +의 활용

*는 0번 이상의 반복을 허용하기 때문에 위 정규식에서는 빈 문자열("")도 유효한 것으로 통과됩니다. 최소 한 글자 이상의 알파벳을 반드시 요구하려면 * 대신 +(1번 이상 반복)를 사용하여 "^[a-zA-Z]+$"로 작성하면 됩니다.

여러 문자열을 반복해서 검사할 때는 예제 1처럼 Pattern 객체를 미리 컴파일해 재사용하는 것이 성능 면에서 유리하고, 단일 문자열을 간단히 확인할 때는 예제 2의 matches() 메서드가 더 편리합니다.