정규식 테스트하는 방법을 찾고 계신가요? 정규표현식(Regular Expression)은 문자열 패턴을 정의하고 검색, 치환, 검증하는 데 사용되는 강력한 도구입니다. 하지만 복잡한 문법 때문에 작성한 패턴이 의도대로 동작하는지 확인하는 과정이 필수입니다.
정규식 테스트가 필요한 이유
정규식은 한 글자만 잘못 써도 전혀 다른 결과를 반환합니다. 이메일 검증 패턴에서 마침표(.)를 이스케이프하지 않으면 모든 문자와 매칭되어 잘못된 이메일도 통과시키게 됩니다. 실제 서비스에 적용하기 전에 다양한 테스트 케이스로 검증해야 버그를 예방할 수 있습니다.
방법 1: 온라인 정규식 테스터 활용
가장 빠르고 편리한 방법은 온라인 도구를 사용하는 것입니다. 브라우저에서 바로 정규식 패턴을 입력하고 테스트 문자열에 대한 매칭 결과를 실시간으로 확인할 수 있습니다.
온라인 도구의 장점은 설치가 필요 없고 시각적으로 매칭 결과를 보여준다는 점입니다. 복잡한 패턴을 작성할 때 정규식 테스터를 활용하면 각 그룹이 어떤 부분과 매칭되는지 색상으로 구분해서 확인할 수 있어 디버깅이 훨씬 수월해집니다.
| 도구 유형 | 장점 | 단점 |
|---|---|---|
| 온라인 테스터 | 설치 불필요, 시각적 피드백 | 인터넷 연결 필요 |
| IDE 플러그인 | 개발환경 통합, 오프라인 사용 | 별도 설치 필요 |
| CLI 도구 | 스크립트 자동화 가능 | 학습 곡선 존재 |
방법 2: JavaScript에서 정규식 테스트
JavaScript에서는 RegExp 객체의 test() 메서드나 문자열의 match() 메서드를 사용해 정규식을 테스트할 수 있습니다.
// test() 메서드 - 매칭 여부만 확인 (true/false)
const pattern = /^[a-zA-Z0-9]+@[a-zA-Z0-9]+\.[a-zA-Z]{2,}$/;
console.log(pattern.test('[email protected]')); // true
console.log(pattern.test('invalid-email')); // false
// match() 메서드 - 매칭된 결과 반환
const text = '전화번호: 010-1234-5678';
const phonePattern = /\d{3}-\d{4}-\d{4}/;
console.log(text.match(phonePattern)); // ['010-1234-5678']
방법 3: Python에서 정규식 테스트
Python에서는 re 모듈을 사용합니다. search(), match(), findall() 등 다양한 메서드를 제공하며, 각각 용도가 다릅니다.
import re
# search() - 문자열 전체에서 패턴 검색
result = re.search(r'\d{4}-\d{2}-\d{2}', '생년월일: 1990-05-15')
if result:
print(result.group()) # 1990-05-15
# findall() - 모든 매칭 결과를 리스트로 반환
text = '가격: 10000원, 할인가: 8000원'
prices = re.findall(r'\d+', text)
print(prices) # ['10000', '8000']
# sub() - 패턴에 맞는 부분을 치환
masked = re.sub(r'\d{4}-\d{4}', '****-****', '카드번호: 1234-5678-9012-3456')
print(masked) # 카드번호: ****-****-9012-3456
- re.match(): 문자열 시작 부분에서만 매칭 확인
- re.search(): 문자열 전체에서 첫 번째 매칭 검색
- re.findall(): 모든 매칭을 리스트로 반환
- re.sub(): 매칭된 부분을 다른 문자열로 치환
방법 4: IDE 플러그인 사용
Visual Studio Code, IntelliJ IDEA 등 대부분의 IDE에서 정규식 테스트 플러그인을 지원합니다. 코드를 작성하면서 바로 옆에서 패턴을 테스트할 수 있어 개발 효율이 높아집니다.
VS Code에서는 'Regex Previewer' 확장을 설치하면 에디터 내에서 정규식 매칭 결과를 실시간으로 확인할 수 있습니다. 찾기/바꾸기(Ctrl+H) 기능에서 정규식 모드를 활성화하면 파일 내 텍스트에 대해 바로 테스트해볼 수도 있습니다.
방법 5: 단위 테스트로 정규식 검증
프로덕션 코드에서 사용하는 정규식은 단위 테스트를 작성해 검증하는 것이 좋습니다. 다양한 엣지 케이스를 테스트 케이스로 만들어두면 패턴 수정 시에도 기존 기능이 깨지지 않는지 확인할 수 있습니다.
// Jest를 사용한 정규식 테스트 예시
describe('이메일 검증 정규식', () => {
const emailRegex = /^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,}$/;
test('유효한 이메일 형식 통과', () => {
expect(emailRegex.test('[email protected]')).toBe(true);
expect(emailRegex.test('[email protected]')).toBe(true);
});
test('유효하지 않은 이메일 형식 거부', () => {
expect(emailRegex.test('invalid')).toBe(false);
expect(emailRegex.test('@example.com')).toBe(false);
expect(emailRegex.test('user@')).toBe(false);
});
});
정규식 테스트는 단순히 패턴이 동작하는지 확인하는 것을 넘어, 예상치 못한 입력에도 안정적으로 동작하는지 검증하는 과정입니다. 위에서 소개한 5가지 방법을 상황에 맞게 조합해서 활용하면 더 견고한 정규표현식을 작성할 수 있습니다.