정규 표현식과 Pattern 클래스
이메일, 전화번호 등을 사용자가 제대로 입력했는지 검증해야 할 때 정규 표현식을 사용하는 경우가 있다. 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-4567 또는 010-1234-5678과 같은 전화번호를 위한 정규 표현식.
(02|010)-\d{3,4}-\d{4}
기호 | 설명 |
---|---|
(02|010) | 02 또는 010 |
- | - 포함 |
\d{3,4} | 3자리 또는 4자리 숫자 |
- | - 포함 |
\d{4} | 4자리 숫자 |
이메일 주소인 eomdev@eomdev.com 과 같은 정규 표현식
\w+@\w+\.\w+(\.\w+)?
기호 | 설명 |
---|---|
\w+ | 한 개 이상의 알파벳 또는 숫자 |
@ | @ |
\w+ | 한 개 이상의 알파벳 또는 숫자 |
\. | . (그냥 .은 모든 문자 중에서 한 개의 문자를 뜻한다) |
\w+ | 한 개 이상의 알파벳 또는 숫자 |
(\.\w+)? | .한 개 이상의 알파벳 또는 숫자가 없거나 한 번 더 올 수 있음 |
테스트
import org.junit.Test;
import java.util.regex.Pattern;
import static org.fest.assertions.api.Assertions.assertThat;
public class ApplicationTest {
@Test
public void testRegExp() throws Exception {
// given : 테스트 상황을 설정
String regExp = "(02|010)-\\d{3,4}-\\d{4}";
String data = "010-1234-5678";
String data2 = "011-1234-5678";
// when : 테스트 대상을 실행
// java.util.regex.Pattern 클래스의 정적 메소드인 matches() 메소드로 검사할 수 있다.
boolean result = Pattern.matches(regExp, data);
// then : 결과를 검증
// fest assert를 이용한 검증
assertThat(result).isTrue();
assertThat(data2).matches(regExp);
}
}
011 은 정규 표현식에 맞지 않으므로 테스트가 통과되지 않는걸 볼 수 있다.