이메일 형식을 검증하는 정규식을 작성했는데 코드에 넣으니 유효한 이메일도 걸러버린다. 패턴 어딘가에 실수가 있는 건데, 코드를 실행하고 결과를 보고 다시 고치고를 반복하면 시간이 한없이 간다. 패턴을 코드에 적용하기 전에 테스트부터 해야 한다.
정규식 기본 문법 요약
| 기호 | 의미 | 예시 |
|---|---|---|
. | 아무 문자 1개 | a.c → abc, a1c, a-c |
\d | 숫자 (0~9) | \d{3} → 010, 123 |
\w | 영문, 숫자, 밑줄 | \w+ → hello, user_1 |
* | 0회 이상 반복 | ab*c → ac, abc, abbc |
+ | 1회 이상 반복 | ab+c → abc, abbc (ac은 불일치) |
? | 0회 또는 1회 | colou?r → color, colour |
[ ] | 문자 클래스 | [aeiou] → 모음 1개 |
^ | 문자열 시작 | ^Hello → Hello로 시작하는 문자열 |
$ | 문자열 끝 | end$ → end로 끝나는 문자열 |
자주 쓰는 정규식 패턴
이메일 검증
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
@ 앞에 영문, 숫자, 특수문자 조합, @ 뒤에 도메인 형식을 검사한다.
한국 전화번호
^01[016789]-?\d{3,4}-?\d{4}$
010, 011, 016, 017, 018, 019로 시작하고, 하이픈이 있어도 없어도 매칭된다.
한글만
[가-힣]+
완성된 한글 음절만 매칭한다. 자음/모음 단독은 제외된다.
패턴 실시간으로 확인하기
패턴을 짜면서 바로바로 결과를 확인하고 싶을 때 정규식 테스터가 유용하다. 상단에 패턴을 입력하고 아래에 테스트 문자열을 넣으면 매칭되는 부분이 하이라이트로 표시된다.
- 플래그 설정 : g(전역 매칭), i(대소문자 무시), m(멀티라인), s(dotAll) 옵션을 토글로 켜고 끌 수 있다
- 캡처 그룹 : 괄호 ()로 묶은 부분의 매칭 결과가 별도로 표시된다
- 프리셋 패턴 : 이메일, URL, 전화번호, 한글 등 자주 쓰는 패턴이 미리 준비되어 있다
TIP 정규식은 언어마다 미세한 차이가 있다. JavaScript의 정규식과 Python의 re 모듈은 일부 문법이 다르니, 실제 사용 환경에 맞는 테스터를 쓰는 게 좋다.
정규식은 한 번 익혀두면 데이터 추출, 입력 검증, 로그 파싱 등 어디서든 쓰인다. 패턴이 복잡해질수록 테스터 없이는 디버깅이 어려우니, 작성과 테스트를 동시에 하는 습관을 들이는 게 좋다.