정규식 자주 쓰는 패턴 모음 - 실무에서 바로 복붙하는 핵심 정리
이메일, 전화번호, URL 등 실무에서 매일 쓰는 정규식 자주 쓰는 패턴을 한곳에 정리했습니다. 복사해서 바로 사용하세요.
정규식이 필요한 이유
폼 입력값을 검증하거나 로그 파일에서 특정 패턴을 찾아야 할 때, 매번 조건문을 길게 작성하고 계신가요? 정규식 자주 쓰는 패턴 몇 가지만 익혀두면 수십 줄의 코드를 한 줄로 줄일 수 있습니다.
정규표현식(Regular Expression)은 문자열에서 특정 패턴을 찾고, 치환하고, 검증하는 데 사용하는 표현 방법입니다. 처음엔 복잡해 보이지만, 자주 쓰는 패턴 위주로 익히면 실무 적용이 빠릅니다. 이 글에서는 실제로 가장 많이 사용되는 패턴을 카테고리별로 정리했습니다.
정규식 기본 문법 요약
| 기호 | 의미 | 예시 |
|---|---|---|
| . | 임의의 한 문자 | a.c → abc, aXc |
| * | 앞 문자 0회 이상 반복 | ab* → a, ab, abb |
| + | 앞 문자 1회 이상 반복 | ab+ → ab, abb |
| ? | 앞 문자 0회 또는 1회 | colou?r → color, colour |
| \d | 숫자 [0-9] | \d{3} → 123 |
| \w | 영문, 숫자, 밑줄 | \w+ → hello_1 |
| \s | 공백 문자 | a\sb → a b |
| ^ | 문자열 시작 | ^Hello |
| $ | 문자열 끝 | world$ |
| [abc] | 문자 클래스 | [aeiou] → 모음 매칭 |
이메일과 전화번호 검증 패턴
회원가입 폼에서 가장 먼저 필요한 것이 이메일과 전화번호 검증입니다. 아래는 실무에서 바로 사용할 수 있는 패턴입니다.
이메일 주소 검증
가장 널리 쓰이는 이메일 검증 패턴입니다.
- 기본형:
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ - 매칭 예시: [email protected], [email protected]
- 비매칭: user@, @domain.com, [email protected]
RFC 5322 표준을 완벽히 구현하려면 훨씬 복잡한 패턴이 필요하지만, 실무에서는 위 패턴으로 대부분의 케이스를 처리할 수 있습니다.
전화번호 검증
한국 전화번호 형식에 맞춘 패턴입니다.
- 휴대폰:
^01[016789]-?\d{3,4}-?\d{4}$ - 일반 전화:
^0\d{1,2}-?\d{3,4}-?\d{4}$ - 하이픈 포함/미포함 모두 허용: 010-1234-5678, 01012345678 둘 다 매칭
-?로 처리하면, 사용자가 하이픈을 넣든 안 넣든 모두 유효하게 검증됩니다. 저장 시에는 하이픈을 제거한 숫자만 보관하는 것이 일반적입니다.URL과 IP 주소 패턴
웹 개발에서 URL 유효성 검사와 IP 주소 필터링은 빈번하게 필요합니다. 정규식 자주 쓰는 패턴 중에서도 URL과 IP 관련 패턴은 보안과 직결되기 때문에 정확한 사용이 중요합니다.
URL 검증
^https?:\/\/(www\.)?[a-zA-Z0-9-]+(\.[a-zA-Z]{2,})+(\/[^\s]*)?$
이 패턴은 http와 https 프로토콜을 모두 허용하고, www 접두사는 선택 사항으로 처리합니다. 경로(path)까지 포함하여 검증할 수 있습니다.
IP 주소 검증
| 유형 | 패턴 | 매칭 예시 |
|---|---|---|
| IPv4 기본 | ^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$ | 192.168.0.1 |
| IPv4 엄격 | ^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$ | 0~255 범위만 허용 |
| 사설 IP | ^(192\.168|10\.|172\.(1[6-9]|2\d|3[01])) | 192.168.x.x, 10.x.x.x |
기본 패턴은 999.999.999.999도 통과시키므로, 실무에서는 엄격한 패턴을 권장합니다.
문자열 처리에 유용한 패턴
데이터 정제, 로그 분석, 텍스트 전처리에서 자주 사용하는 패턴들입니다.
공백 및 특수문자 처리
- 앞뒤 공백 제거:
^\s+|\s+$- trim 함수와 동일한 효과 - 연속 공백을 하나로:
\s{2,}→ 치환 대상을 공백 1개로 설정 - HTML 태그 제거:
<[^>]*>- 단순 태그 제거용(중첩 태그에는 파서 사용 권장) - 한글만 추출:
[가-힣]+ - 숫자만 추출:
\d+
날짜 형식 검증
날짜 관련 패턴은 프로젝트마다 형식이 다르므로, 상황에 맞게 선택합니다.
- YYYY-MM-DD:
^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$ - YYYY/MM/DD:
^\d{4}\/(0[1-9]|1[0-2])\/(0[1-9]|[12]\d|3[01])$ - YYYYMMDD:
^\d{4}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])$
정규식은 날짜의 형식만 검증할 뿐, 2월 30일 같은 논리적 오류까지 잡아주지는 않습니다. 형식 검증 후에는 반드시 날짜 라이브러리로 유효성을 한 번 더 확인하세요.
비밀번호와 입력값 검증 패턴
보안이 중요한 입력값 검증 패턴입니다. 특히 비밀번호 정책은 서비스마다 기준이 다르므로, 조합해서 사용합니다.
비밀번호 강도 검증
| 조건 | 패턴 | 설명 |
|---|---|---|
| 최소 8자 | .{8,} | 길이만 체크 |
| 영문 + 숫자 | ^(?=.*[A-Za-z])(?=.*\d).{8,}$ | 영문, 숫자 각 1개 이상 |
| 영문 + 숫자 + 특수문자 | ^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*#?&]).{8,}$ | 3종 조합 필수 |
| 대문자 포함 | ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$ | 대소문자 구분 포함 |
위 패턴에서 사용된 (?=...)는 전방 탐색(lookahead)이라는 기법입니다. 실제 매칭에는 포함되지 않지만, 해당 조건이 충족되는지 확인합니다. 비밀번호처럼 여러 조건을 동시에 만족해야 할 때 유용합니다.
기타 입력값 검증
- 한글 이름(2~5자):
^[가-힣]{2,5}$ - 사업자등록번호:
^\d{3}-\d{2}-\d{5}$ - 주민등록번호 형식:
^\d{6}-[1-4]\d{6}$ - 우편번호(5자리):
^\d{5}$
개발 과정에서 해시값이나 체크섬을 다루는 경우, 정규식으로 형식을 검증하기도 합니다. 예를 들어 SHA-256 해시 형식은 ^[a-fA-F0-9]{64}$로 확인할 수 있는데, 해시값을 직접 생성해야 한다면 해시 생성기 같은 온라인 도구를 활용하면 빠르게 테스트할 수 있습니다.
정규식 실전 활용 팁
정규식 자주 쓰는 패턴을 알아도, 실전에서 효율적으로 쓰려면 몇 가지 원칙이 필요합니다.
성능을 고려한 작성법
탐욕적(greedy) vs 게으른(lazy) 매칭을 구분하세요. .*는 가능한 많이 매칭하고, .*?는 가능한 적게 매칭합니다. HTML 태그 내용을 추출할 때 <div>.*</div>를 쓰면 마지막 닫는 태그까지 한 번에 잡히므로, <div>.*?</div>로 작성해야 합니다.
자주 하는 실수 3가지
1. 이스케이프 누락: 마침표(.)는 정규식에서 '임의의 문자'를 의미합니다. 실제 마침표를 매칭하려면 \.으로 이스케이프해야 합니다.
2. 앵커(^, $) 미사용: 부분 매칭이 아닌 전체 문자열 검증이 목적이라면, 반드시 시작(^)과 끝($) 앵커를 붙이세요. 없으면 문자열 어딘가에 패턴이 포함되기만 해도 통과됩니다.
3. 과도한 복잡도: 하나의 정규식으로 모든 것을 해결하려 하지 마세요. 복잡한 검증은 여러 단계로 나누는 것이 유지보수에 유리합니다.
활용할 수 있는 테스트 도구
작성한 정규식이 의도대로 동작하는지 확인하려면 온라인 테스터를 활용하세요. regex101.com은 패턴별 설명까지 제공해서 학습용으로도 좋고, 각 프로그래밍 언어(Python, JavaScript, Go 등)별로 엔진을 선택할 수 있어 실무 테스트에도 적합합니다.
오늘 정리한 패턴 중 자신의 프로젝트에 필요한 것부터 하나씩 적용해 보세요. 처음에는 기본 패턴을 복사해서 쓰다가, 점차 프로젝트에 맞게 수정하는 과정에서 자연스럽게 정규식 실력이 올라갑니다. 자주 쓰는 패턴은 코드 스니펫이나 유틸리티 파일로 관리해 두면, 팀 전체의 생산성까지 높일 수 있습니다.