개발자가 북마크해야 할 정규식 패턴 20선
가장 유용한 정규식 실전 치트시트 — 이메일, URL, 전화번호, IP, 날짜 등. 복사해서 바로 써.
정규식은 될 때는 마법 같고 안 될 때는 미칠 것 같은 도구야. 유용한 패턴을 몇 년간 모아왔는데, 이 20개가 내가 계속 꺼내 쓰는 것들이야.
이 페이지 북마크해. 다시 돌아올 거야.
자꾸 까먹는 기본
패턴 전에, 사람들이 헷갈리는 부분 빠르게 복습:
.은 아무 문자 매칭 (줄바꿈 제외)*는 0개 이상,+는 1개 이상,?는 0개 또는 1개\d는 숫자,\w는 단어 문자,\s는 공백^는 문자열 시작,$는 문자열 끝()는 그룹,[]는 문자 클래스,{}는 수량
20가지 패턴
1. 이메일 주소
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
대부분의 실제 이메일을 커버해. RFC 5322 완전 호환은 아니지만(거의 아무것도 아님) 유효한 주소의 99%를 처리해.
2. URL (HTTP/HTTPS)
https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)
경로와 쿼리 문자열이 있는 HTTP와 HTTPS URL 모두 매칭.
3. 전화번호 (국제)
^\+?[1-9]\d{1,14}$
E.164 포맷 — 국제적으로 작동해. 한국 전용: ^01[016789]-?\d{3,4}-?\d{4}$
4. IPv4 주소
^((25[0-5]|(2[0-4]|1\d|[1-9]|)\d)\.?\b){4}$
각 옥텟이 0-255인지 검증해. 더 간단한 패턴들은 999.999.999.999 같은 잘못된 주소도 받아들여.
5. IPv6 주소
^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$
기본 전체 형식 IPv6. 축약 표기(::)는 커버하지 않지만 가장 흔한 포맷을 처리해.
6. 날짜 (YYYY-MM-DD)
^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$
ISO 8601 날짜 포맷. 월과 일 범위를 검증하지만 2월 31일 같은 불가능한 날짜는 체크 안 해.
7. 시간 (HH:MM, 24시간)
^([01]\d|2[0-3]):([0-5]\d)$
24시간 형식, 00:00에서 23:59.
8. 16진수 색상 코드
^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$
3자리와 6자리 hex 색상 모두 매칭: #fff, #1a2b3c.
9. 강한 비밀번호
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$
대문자, 소문자, 숫자, 특수문자가 포함된 최소 8자. 최소 길이와 허용 문자를 필요에 따라 조정해.
10. 사용자명
^[a-zA-Z0-9_-]{3,20}$
영숫자에 밑줄과 하이픈, 3-20자.
11. HTML 태그
<\/?[\w\s]*>|<.+[\W]>
여는 태그와 닫는 HTML 태그 매칭. 실제 작업에서 HTML 파싱에 정규식 쓰지 마 — 적절한 파서를 써. 근데 빠른 검색에는 작동해.
12. 공백 트리밍
^\s+|\s+$
앞뒤 공백을 매칭. 정리 작업에 유용해.
13. 중복 단어
\b(\w+)\s+\1\b
"the the"나 "is is" 같은 반복 단어를 잡아. 교정에 좋아.
14. 파일 확장자
\.([a-zA-Z0-9]+)$
파일 확장자를 추출해. 그룹 1이 점 없는 확장자만 줘.
15. 슬러그 (URL 친화적 문자열)
^[a-z0-9]+(?:-[a-z0-9]+)*$
URL 슬러그 검증: 소문자, 숫자, 하이픈. 연속 하이픈 없고 하이픈으로 시작하거나 끝나지 않아.
16. 신용카드 번호 (기본)
^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|3[47][0-9]{13})$
Visa, MasterCard, American Express 패턴 감지. 포맷 검증용이야 — 실제 검증에는 항상 결제 처리기를 써.
17. UUID v4
^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
올바른 버전과 변형 비트가 있는 UUID 버전 4 포맷 검증.
18. JSON 문자열 값
"(?:[^"\\]|\\.)*"
백슬래시 이스케이프를 올바르게 처리하는 JSON 문자열 값 매칭.
19. CSS 속성
([a-z-]+)\s*:\s*([^;]+);
CSS 속성-값 쌍 추출. 그룹 1이 속성 이름, 그룹 2가 값.
20. 마크다운 링크
\[([^\]]+)\]\(([^)]+)\)
[텍스트](url) 링크 매칭. 그룹 1이 링크 텍스트, 그룹 2가 URL.
정규식 사용 팁
단순하게 시작해서 확장해. 완벽한 패턴을 한 번에 쓰려고 하지 마. 작동하는 가장 단순한 버전부터 시작하고 엣지 케이스 처리를 추가해.
테스터를 써. 배포 전에 항상 실제 데이터로 패턴을 테스트해. 엣지 케이스가 놀라게 할 거야.
주석을 달아. 대부분의 정규식 엔진이 주석과 공백을 추가할 수 있는 상세 모드를 지원해.
정규식을 쓰지 말아야 할 때를 알아. HTML 파싱, 복잡한 날짜 검증, 깊이 중첩된 구조 처리 — 그런 건 적절한 파서를 써.
텍스트 비교로 정규식 치환이 올바른 결과를 냈는지 확인하거나, 글자수 세기로 매칭된 문자열의 길이를 체크할 수도 있어.
정규식은 연습으로 늘어나는 기술이야. 모든 문법 규칙을 외울 필요는 없어 — 패턴을 읽고 필요에 맞게 수정할 수 있을 만큼 알면 돼. 이 치트시트를 가까이 두면 Stack Overflow에서 덜 시간 쓰고 실제로 만드는 데 더 시간을 쓸 수 있을 거야.