자바(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() 메서드처럼 한 줄로 처리하는 두 번째 방법이 더 편리합니다. 상황에 맞게 선택하여 사용하시기 바랍니다.