회원가입 폼에서 이메일 검증이 자꾸 통과되지 않는다는 문의가 들어왔다. 확인해보니 정규식에서 점(.)을 리터럴 마침표로 쓰려면 \\.으로 이스케이프해야 하는데, 그냥 .으로 넣어서 아무 문자나 통과시키고 있었다. 정규식은 한 글자 차이로 전혀 다른 결과가 나온다.
정규표현식 기본 문법 5가지
정규식을 처음부터 다 외울 필요는 없다. 실무에서 가장 자주 쓰는 패턴은 몇 가지로 압축된다.
| 기호 | 의미 | 예시 |
|---|---|---|
. | 아무 문자 1개 | a.c → abc, a1c, a-c |
\d | 숫자 1개 | \d{3} → 123, 456 |
+ | 1개 이상 반복 | a+ → a, aa, aaa |
* | 0개 이상 반복 | ab*c → ac, abc, abbc |
[] | 문자 클래스 | [a-z] → 소문자 1개 |
바로 복사해서 쓰는 실전 패턴
이메일 검증
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
@ 앞에 영문, 숫자, 특수문자 일부를 허용하고, 도메인 뒤에 최소 2자리 이상의 TLD가 오는지 확인한다.
한국 휴대폰 번호
^01[016789]-?\d{3,4}-?\d{4}$
010, 011, 016, 017, 018, 019로 시작하며, 하이픈은 있어도 없어도 매치된다.
한글만 허용
^[가-힣]+$
이름 입력란에서 영문이나 숫자를 걸러낼 때 쓴다.
패턴이 맞는지 확인하는 법
정규식은 머릿속으로 시뮬레이션하기 어렵다. 패턴을 조금씩 고치면서 결과를 실시간으로 보는 게 가장 빠른 학습법이다. 정규식 테스터에 패턴과 테스트 문자열을 넣으면 매치된 부분이 즉시 하이라이트되고, 캡처 그룹과 매치 위치까지 상세하게 나온다. 이메일, URL, 전화번호 같은 프리셋 패턴도 있어서 기본 틀을 가져다 수정하면 처음부터 짜는 것보다 훨씬 빠르다.
TIPg플래그(global)를 켜면 첫 번째 매치만이 아니라 문자열 전체에서 모든 매치를 찾아준다.i플래그를 추가하면 대소문자를 구분하지 않는다. 테스트할 때 이 두 플래그는 거의 항상 켜두는 게 편하다.
정규식은 외우는 게 아니라, 테스트하면서 익히는 거다. 패턴 하나를 수정할 때마다 결과가 어떻게 달라지는지 보면, 문법이 자연스럽게 손에 익는다.