유틸리티

정규표현식 기초, 자주 쓰는 패턴 5가지와 테스트 방법

회원가입 폼에 이메일 유효성 검사를 넣으려고 정규식을 작성했다. 그런데 테스트해보니 "user@domain" 같은 불완전한 주소도 통과시킨다. 정규표현식은 한 글자만 빠져도 결과가 완전히 달라지기 때문에 작성 후 반드시 검증해야 한다.

정규식이 어려운 진짜 이유

정규표현식(Regular Expression, regex)은 문자열에서 특정 패턴을 찾기 위한 언어다. 문제는 문법이 직관적이지 않다는 것. ^[a-zA-Z0-9]+$ 같은 코드를 보고 바로 의미를 파악할 수 있는 사람은 많지 않다.

하지만 자주 쓰는 패턴은 정해져 있다. 아래 5가지만 익혀두면 실무에서 필요한 상황의 80%는 커버된다.

실무에서 가장 많이 쓰는 패턴 5가지

1. 이메일 주소 검증

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

@ 앞에 영문, 숫자, 일부 특수문자를 허용하고, @ 뒤에 도메인과 최소 2자리 TLD를 요구한다. 완벽하진 않지만 프론트엔드 1차 검증으로는 충분하다.

2. 한국 휴대폰 번호

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

010, 011, 016, 017, 018, 019로 시작하는 번호를 잡는다. 하이픈은 있어도 되고 없어도 통과한다.

3. 한글만 허용

^[가-힣]+$

이름 입력란처럼 한글만 받아야 하는 필드에 쓴다. 공백을 허용하려면 [가-힣\s]로 바꾸면 된다.

4. URL 형식 확인

^https?:\/\/[\w.-]+\.[a-zA-Z]{2,}(\/\S*)?$

http:// 또는 https://로 시작하는 URL을 검증한다. 쿼리 파라미터나 경로가 붙어도 매칭된다.

5. 비밀번호 강도 체크

^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$

영문, 숫자, 특수문자를 각각 1개 이상 포함하고 8자리 이상인지 검사한다. 전방탐색(lookahead)을 쓰기 때문에 순서와 무관하게 조건을 확인한다.

자주 헷갈리는 문법 정리

기호의미예시
.아무 문자 1개a.c → abc, a1c, a-c
+1개 이상 반복\d+ → 1, 123, 99999
*0개 이상 반복ab*c → ac, abc, abbc
?0개 또는 1개colou?r → color, colour
^문자열 시작^Hello → Hello로 시작하는 줄
$문자열 끝end$ → end로 끝나는 줄
\d숫자 (0-9)\d{3} → 123, 456
\w영문+숫자+밑줄\w+ → hello, user_1

작성한 정규식, 바로 확인하는 법

코드에 넣기 전에 패턴이 의도대로 작동하는지 먼저 확인하는 게 안전하다. 온라인 정규식 테스터에 패턴과 테스트 문자열을 넣으면 매칭 결과가 실시간으로 하이라이트된다. g, i, m, s 플래그를 토글할 수 있고, 캡처 그룹 내용과 매칭 위치(index)도 상세하게 보여준다. 이메일, 전화번호, URL 같은 프리셋 패턴이 내장되어 있어서 처음부터 작성할 필요 없이 가져다 수정해서 쓸 수도 있다.

정규식은 한 번 익혀두면 언어가 바뀌어도 거의 그대로 쓸 수 있다. JavaScript, Python, Java, Go 어디서든 문법이 거의 동일하다. 위 5가지 패턴을 복사해두고 필요할 때 꺼내 쓰면 매번 처음부터 고민할 필요가 없다.