유틸리티

정규표현식 테스트하는 법과 자주 쓰는 패턴 모음

회원가입 폼에 이메일 검증을 달아야 하는데, 정규식 패턴을 하나 만들고 보니 제대로 작동하는지 확인할 방법이 마땅치 않다. 콘솔에서 하나씩 테스트하기엔 경우의 수가 너무 많다.

정규표현식 기본 문법 빠르게 보기

기호의미예시
.아무 문자 1개a.c → abc, a1c
\d숫자 (0-9)\d{3} → 010, 123
\w영문+숫자+밑줄\w+ → hello_1
+1개 이상 반복a+ → a, aaa
*0개 이상 반복ab*c → ac, abbc
?0개 또는 1개colou?r → color, colour
[ ]문자 클래스[a-z] → 소문자 1개
( )캡처 그룹(\d+)-(\d+)

이 정도만 알면 실무에서 필요한 패턴 대부분을 만들 수 있다. 문법을 외우는 것보다 직접 패턴을 넣고 결과를 보면서 익히는 게 훨씬 빠르다.

실무에서 바로 쓸 수 있는 패턴

이메일 검증

^[\w.-]+@[\w-]+\.[a-zA-Z]{2,}$

[email protected]은 통과하고 user@@com은 걸러낸다. 도메인 부분에 점이 최소 하나 있어야 한다는 조건이 핵심이다.

한국 전화번호

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

하이픈이 있든 없든 모두 매칭된다. 010-1234-5678, 01012345678 둘 다 통과한다.

한글만 허용

^[가-힣]+$

이름 입력 필드에서 영문이나 숫자를 걸러낼 때 쓴다. 자음이나 모음만 단독으로 들어오는 건 막지 못하니, 필요하면 [ㄱ-ㅎㅏ-ㅣ가-힣]으로 확장하면 된다.

플래그에 따라 결과가 달라진다

g (global)
첫 번째 매칭만 찾는 게 아니라 텍스트 전체에서 모든 매칭을 찾는다
i (case-insensitive)
대소문자를 구분하지 않는다. /abc/i는 ABC, Abc 모두 매칭
m (multiline)
^$가 줄바꿈 단위로 적용된다. 여러 줄 텍스트를 검사할 때 필수

패턴이 맞는지 확인하는 방법

코드에 넣기 전에 먼저 테스트 환경에서 돌려보는 게 정석이다. 정규식 테스터에 패턴과 테스트 문자열을 넣으면 매칭되는 부분이 실시간으로 하이라이트 표시된다. 캡처 그룹 내용도 따로 보여주기 때문에, 괄호로 묶은 부분이 의도한 대로 잡히는지 바로 확인할 수 있다.

참고 정규표현식은 언어마다 미묘한 차이가 있다. JavaScript의 \b는 한글 단어 경계를 인식하지 못하고, Python은 기본적으로 .이 줄바꿈을 포함하지 않는다. 실제 사용할 언어 환경에서 최종 검증하는 걸 빠뜨리지 말자.

정규식을 잘 쓰면 수십 줄짜리 문자열 처리 코드가 한 줄로 줄어든다. 다만 복잡한 패턴은 본인도 나중에 못 읽는다. 패턴을 만들 때마다 테스트를 돌려보고, 주석으로 의도를 남겨두면 유지보수할 때 후회하지 않는다.