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

Java 정규식으로 문자열에 영숫자가 하나 이상 포함되어 있는지 확인하는 방법

자바(Java)에서 문자열에 영숫자(alphanumeric)가 최소 한 개 이상 포함되어 있는지 검사해야 하는 경우가 자주 있습니다. 예를 들어 아이디 유효성 검사나 입력값 필터링 등이 대표적입니다. 이럴 때 정규식을 활용하면 간단하게 처리할 수 있습니다.

영숫자 포함 여부를 검사하는 정규식

다음 정규식은 문자열에 영숫자가 최소 한 개 이상 포함되어 있는지 확인합니다.

"^.*[a-zA-Z0-9]+.*$";

각 패턴 요소의 의미는 다음과 같습니다.

  • ^.* — 문자열의 시작 부분에서 임의의 문자가 0개 이상 나오는 것과 일치합니다.

  • [a-zA-Z0-9]+ — 알파벳 대소문자 또는 숫자가 최소 한 개 이상 포함되는지 일치시킵니다. 이 부분이 핵심입니다.

  • .*$ — 문자열의 끝 부분에서 임의의 문자가 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 Example {
    public static void main(String args[]) {
        // 사용자로부터 문자열 입력받기
        System.out.println("문자열을 입력하세요");
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();

        // 정규식 정의
        String regex = "^.*[a-zA-Z0-9]+.*$";

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

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

        if(matcher.matches()) {
            System.out.println("입력한 문자열은 유효합니다.");
        } else {
            System.out.println("입력한 문자열은 유효하지 않습니다.");
        }
    }
}

실행 결과 1

문자열을 입력하세요
###test123$$$
입력한 문자열은 유효합니다.

실행 결과 2

문자열을 입력하세요
####$$$$
입력한 문자열은 유효하지 않습니다.

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

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

import java.util.Scanner;

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

        // 정규식 정의 및 검사
        String regex = "^.*[a-zA-Z0-9]+.*$";
        boolean result = input.matches(regex);

        if(result) {
            System.out.println("유효한 일치입니다.");
        } else {
            System.out.println("유효하지 않은 일치입니다.");
        }
    }
}

실행 결과 1

문자열을 입력하세요
###test123$$$
유효한 일치입니다.

실행 결과 2

문자열을 입력하세요
####$$$$
유효하지 않은 일치입니다.

마무리

두 방식 모두 동일한 결과를 제공하지만, 반복적으로 같은 정규식을 사용한다면 Pattern 객체를 미리 컴파일해 두고 재사용하는 첫 번째 방법이 성능 면에서 유리합니다. 반면 간단한 일회성 검사라면 matches() 메서드처럼 한 줄로 처리하는 두 번째 방법이 더 편리합니다. 상황에 맞게 선택하여 사용하시기 바랍니다.