알파벳 검증에 사용되는 정규식
입력받은 문자열이 영문 알파벳(대소문자)만으로 이루어져 있는지 확인할 때는 다음 정규식을 사용합니다.
"^[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() 메서드가 더 편리합니다.