정규 표현식 기반 입력 검증
사용자 입력 유효성 검증은 정규 표현식을 활용해 효율적으로 처리할 수 있습니다. 다양한 검증 요구사항에 대응하는 유틸리티 클래스를 설계해 보겠습니다.
import java.util.regex.*;
public class RegexValidator {
// 유니코드 한글 검증
public static boolean isValidKorean(String input) {
return matchesPattern(input, "[\\uAC00-\\uD7A3]+");
}
// 영문 대소문자 검증
public static boolean isValidAlphabet(String input) {
return matchesPattern(input, "[A-Za-z]+");
}
// 숫자 검증 (최소/최대 길이 지정 가능)
public static boolean isValidNumeric(String input, Integer minLen, Integer maxLen) {
String pattern = (minLen != null && maxLen != null) ?
"\\d{" + minLen + "," + maxLen + "}" : "\\d+";
return matchesPattern(input, pattern);
}
// 이메일 형식 검증
public static boolean isValidEmail(String input) {
return matchesPattern(input, "\\w[-\\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\\.)+[A-Za-z]{2,14}");
}
// 시간 형식(hh:mm:ss) 검증
public static boolean isValidTime(String input) {
return matchesPattern(input, "([01]?\\d|2[0-3]):[0-5]?\\d:[0-5]?\\d");
}
// IP 주소 형식 검증
public static boolean isValidIP(String input) {
String octet = "(25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]?\\d)";
return matchesPattern(input, octet + "\\." + octet + "\\." + octet + "\\." + octet);
}
// 공통 패턴 매칭 메서드
private static boolean matchesPattern(String input, String regex) {
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
return matcher.matches();
}
}
검증 메서드 사용 예시
| 메서드 | 설명 | 사용 예 |
|---|---|---|
| isValidKorean() | 한글 문자열 검증 | RegexValidator.isValidKorean("한글테스트") |
| isValidNumeric() | 숫자 형식 및 길이 검증 | RegexValidator.isValidNumeric("12345", 4, 6) |
| isValidEmail() | 이메일 형식 검증 | RegexValidator.isValidEmail("test@example.com") |
| isValidTime() | 시간 형식 검증 | RegexValidator.isValidTime("23:59:59") |
확장 검증 패턴
// 특수 문자 포함 여부 검증
public static boolean containsSpecialChars(String input) {
return !matchesPattern(input, "[a-zA-Z0-9\\uAC00-\\uD7A3]+");
}
// 비밀번호 복잡성 검증 (영문 시작 + 숫자/언더스코어)
public static boolean isValidPassword(String input, int min, int max) {
return matchesPattern(input, "[a-zA-Z]\\w{" + (min-1) + "," + max + "}");
}