문자열이 정해져 있는 형식(정규 표현식: Regular Expression)으로 구성되어 있는지 검증해야하는 경우가 있다. 예를 들어, 이메일, 전화번호를 사용자가 제대로 입력했는지 검증해야 할 때 정규 표현식과 비교한다. 이번에는 정규 표현식을 작성하는 방법과 문자열을 검증하는 방법에 대해 살펴보기로 하자.
정규 표현식 작성 방법
정규 표현식을 작성하는 방법은 API 도큐먼트에서 java.util.regex.Pattern 클래스를 찾아 Summary of regular=expression constructs를 참조하면 되는데, 이해하기 쉽지 않다. 간단히 말해서 정규 표현식은 문자 또는 숫자 기호와 반복 기호가 결합된 문자열이다. 다음은 정규 표현식을 작성하는데 기본적으로 알아두어야 할 기호들에 대한 설명이다.
기호 | 설명 | ||
[ ] | 한 개의 문자 | [abc] | a, b, c 중 하나의 문자 |
[^abc] | a, b, c 이외의 하나의 문자 | ||
[a-zA-Z] | a~z,A~Z 중 하나의 문자 | ||
\d | 한 개의 숫자, [0-9]와 동일 | ||
\s | 공백 | ||
\w | 한 개의 알파벳 또는 한 개의 숫자, [a-zA-Z_0-9]와 동일 | ||
? | 없음 또는 한 개 | ||
* | 없음 또는 한 개 이상 | ||
+ | 한 개 이상 | ||
{n} | 정확히 n개 | ||
{n,} | 최소한 n개 | ||
{n, m} | n개에서부터 m개까지 | ||
( ) | 그룹핑 |
다음은 02-123-1234 또는 010-1234-5678과 같은 전화번호를 위한 정규 표현식이다.
(02|010-\d{3,4}-\d{4})
기호 | 설명 |
(02|010) | 02 또는 010 |
- | - 포함 |
\d{3,4} | 3자리 또는 4자리 숫자 |
- | - 포함 |
\d{4} | 4자리 숫자 |
다음은 name@email.com과 같은 이메일을 위한 정규 표현식이다.
\w+@\w+\.\w+(\.\w+)?
기호 | 설명 |
\w+ | 한 개 이상의 알파벳 또는 숫자 |
@ | @ |
\w+ | 한 개 이상의 알파벳 또는 숫자 |
\. | . |
\w+ | 한 개 이상의 알파벳 또는 숫자 |
(\/\w+)? | \.\w+이 없거나 한 번 더 올 수 있음 |
주의할 점은 \.과 .은 다른데, \.은 문자로서의 점( . )을 말하지만 .은 모든 문자중에서 한 개의 문자를 뜻한다.
Pattern 클래스
정규 표현식으로 문자열을 검증한는 방법을 알아보자. 문자열을 정규 표현식으로 검증하는 기능은 java.util.regex.Pattern 클래스의 정적 메소드인 matches() 메소드가 제공한다.
boolean result = Pattern.matches("정규식", "검증할 문자열");
첫 번째 매개값은 정규 표현식이고, 두 번째 매개값은 검증할 문자열이다. 검증 후 결과가 boolean 타입으로 리턴된다. 다음 예제는 전화번호와 이메일을 검증하는 코드를 보여준다.
// PatternExample.java -- 문자열 검증하기
public class PatternExample {
public static void main(String[] args) {
String regExp = "(02|010-\\d{3,4}-\\d{4})";
String data = "010-123-4567";
boolean result = Pattern.matches(regExp, data);
if(result) {
System.out.println("정규식과 일치합니다.");
} else {
System.out.println("정규식과 일치하지 않습니다.");
}
regExp = "\\w+@\\w+\\.\\w+(\\.\\w+)?";
data = "name@emailcom"
result = Pattern.matches(regExp, data);
if(result) {
System.out.println("정규식과 일치합니다.");
} else {
System.out.println("정규식과 일치하지 않습니다.");
}
}
}
이메일 검증에서 일치하지 않는 이유는 emailcom이라고 되어 있기 때문이다. 반드시 점( . )과 한 개 이상의 알파벳 또는 숫자가 포함되어야 하므로 email.com 이라고 해야 맞다.
'Java 길찾기 > 이것이 자바다' 카테고리의 다른 글
[Java] 기본 API 클래스 - Wrapper (0) | 2022.03.04 |
---|---|
[Java] 기본 API 클래스 - Arrays (0) | 2022.03.03 |
[Java] 기본 API 클래스 - StringBuffer, StringBuilder (0) | 2022.02.28 |
[Java] 기본 API 클래스 - StringTokenizer (0) | 2022.02.25 |
[Java] 기본 API 클래스 - String (0) | 2022.02.24 |