: 문자열이 정해져 있는 형식(= 정규 표현식 : Regular Expression) 으로 구성되어 있는지 검증해야 할 때가 있다.
: 예를 들어 주민등록번호, 이메일, 전화번호 등
간단히 말해 숫자 기호와 반복 기호, 문자가 결합된 문자열이다. 아래 표는 정규 표현식을 작성하는데 기본적으로 알아두어야 할 기호들에 대한 설명이다.
예를 들어
(02|010)-\\d{3,4}-\\d{4}
\\w+@\\w+\\.\\w+(\\.\\w+)?
\\d{2}([0]\\d|[1][0-2])([0][1-9]|[1-2]\\d|[3][0-1])[-]*[1-4]\\d{6}
문자열을 정규 표현식으로 검증하는 기능은 java.util.regex.Pattern
클래스의 정적 메소드인 matches() 메소드가 제공한다.
boolean result = Pattern.matches("정규식", 검증할 문자열");
첫 번째 매개값은 원하는 정규표현식이고, 두 번째 매개값은 검증할 문자열이다.
String regExp = "(02|010)-\\d{3,4}-\\d{4}";
String data = "010-123-45675";
boolean result = Pattern.matches(regExp, data);
if(result) {
System.out.println("정규식과 일치합니다. 올바른 전화번호 형식입니다");
} else {
System.out.println("정규식과 일치하지 않습니다. 올바르지 않은 전화번호 형식입니다.");
}
regExp = "\\w+@\\w+\\.\\w+(\\.\\w+)?";
data = "angel@naver.com";
result = Pattern.matches(regExp, data);
if(result) {
System.out.println("정규식과 일치합니다. 올바른 이메일 형식입니다");
} else {
System.out.println("정규식과 일치하지 않습니다. 올바른 이메일 형식이 아닙니다");
}
// 정규식과 비교해 올바른지/올바르지 않은지 출력
System.out.print("주민등록번호 입력 >");
String input = br.readLine();
String regExp1 = "\\d{2}([0]\\d|[1][0-2])([0][1-9]|[1-2]\\d|[3][0-1])[-]*[1-4]\\d{6}";
boolean result1 = Pattern.matches(regExp1, input);
if(result1) {
System.out.println("올바른 주민등록번호입니다");
} else {
System.out.println("잘못된 주민등록 번호입니다");
}
System.out.println();
// 입력된 아이디의 첫글자가 영문자인지 확인한다
// 숫자, 영문, 특수문자 각 1자리 이상이면서 8자에서 16자 사이
System.out.print("아이디를 입력 >");
String id = br.readLine();
System.out.print("비밀번호 입력 >");
String password = br.readLine();
String idReg = "[a-zA-Z]\\w";
String psReg = "^(?=.*[a-zA-z])(?=.*[0-9])(?=.*[$`~!@$!%*#^?&\\\\(\\\\)\\-_=+]).{8,16}$";
boolean result2 = Pattern.matches(idReg, id);
boolean result2_1 = Pattern.matches(psReg, password);
if(result2) {
if(result2_1) {
System.out.println("로그인 되었습니다");
} else {
System.out.println("비밀 번호가 틀렸습니다");
}
} else {
System.out.println("아이디가 틀렸습니다");
}
System.out.println();
// IP4주소를 입력받는다
// 정규식과 비교해 올바른지 확인한다
System.out.print("IP 주소 입력 >");
String ipInput = br.readLine();
String regExp3 = "^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$";
boolean result3 = Pattern.matches(regExp3, ipInput);
if(result3) {
System.out.println("올바른 IP 주소 형식입니다");
} else {
System.out.println("잘못된 IP 주소 형식입니다");
}