유틸리티

정규식(Regex) 기초, 자주 쓰는 패턴 모음과 테스트 방법

회원가입 폼에서 이메일 형식을 검증해야 하는데, if문으로 @가 있는지, .이 있는지 일일이 확인하는 코드를 쓰고 있었다. 정규표현식 한 줄이면 끝나는 걸 열 줄 넘게 작성하고 있었던 거다.

정규식 기본 문법 요약

패턴의미예시
.아무 문자 1개a.c → abc, a1c, a-c
\d숫자 (0~9)\d{3} → 010, 123
\w영문, 숫자, 밑줄\w+ → hello, test_1
\s공백 문자\s+ → 공백, 탭, 줄바꿈
+1회 이상 반복a+ → a, aa, aaa
*0회 이상 반복ab* → a, ab, abb
?0회 또는 1회colou?r → color, colour
{n,m}n~m회 반복\d{2,4} → 12, 123, 1234
^문자열 시작^Hello → Hello로 시작하는 줄
$문자열 끝end$ → end로 끝나는 줄

실무에서 바로 쓰는 정규식 패턴

이메일 검증

^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$

@ 앞에 영문/숫자/특수문자, 뒤에 도메인과 최소 2자리 확장자가 오는 구조다.

한국 휴대폰 번호

^01[016789]-?\d{3,4}-?\d{4}$

010, 011, 016, 017, 018, 019로 시작하고, 하이픈 유무와 관계없이 매칭된다.

한글만 허용

^[가-힣]+$

완성된 한글 글자만 통과한다. 자음/모음만 단독으로 입력하면 걸러진다.

URL 패턴

https?:\/\/[\w\-]+(\.[\w\-]+)+[\/\w\-.?=&#%]*

http 또는 https로 시작하는 URL을 매칭한다.

주의 정규식으로 이메일이나 URL을 완벽하게 검증하는 건 사실상 불가능하다. 위 패턴은 대부분의 일반적인 케이스를 커버하지만, 엣지 케이스까지 잡으려면 라이브러리를 쓰는 게 낫다. 정규식은 1차 필터 용도로 활용하는 것이 현실적이다.

정규식을 빠르게 테스트하는 법

패턴을 작성하고 코드에 넣기 전에 먼저 테스트해보는 게 좋다. 예상과 다르게 매칭되거나, 특정 입력에서 걸러지지 않는 경우가 생각보다 많다. 정규식 테스터에 패턴과 테스트 문자열을 넣으면 매칭 결과가 실시간으로 하이라이트된다. 플래그(g, i, m) 선택과 캡처 그룹 확인도 가능하고, 이메일/전화번호 같은 프리셋 패턴을 바로 불러올 수도 있다.

정규식은 처음 배울 때 어렵지만, 패턴 몇 개만 익혀두면 문자열 처리 코드가 눈에 띄게 짧아진다. 위의 기본 문법표를 북마크해두고 필요할 때 참고하면 된다.