정규식은 한 번 만들어 두면 로그 파싱·폼 검증·데이터 정제에 계속 씁니다. 정규식 테스터와 함께 쓰는 이메일·전화·URL·한국어 패턴 모음입니다.
실전 패턴
이메일 (실무용)
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
한국 휴대폰
^01[016789]-?\d{3,4}-?\d{4}$
URL
^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)$
날짜 YYYY-MM-DD
^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$
| 패턴 | 용도 | 주의 |
|---|---|---|
| 이메일 | 가입 | RFC 완벽 X, 실무용 |
| 전화 | CRM | 하이픈 optional |
| URL | 링크 검증 | http/https |
| 날짜 | 로그 | 윤년 별도 |
테스터 사용법
- 패턴 + 플래그(g, i, m) 입력
- 매칭·비매칭 샘플 10개 저장
- 코드에 복사 전 ReDoS 긴 입력 테스트
팁: 이메일은 정규식만 믿지 말고 확인 메일을 병행하세요. JWT처럼 보안 경로는 화이트리스트가 더 안전할 때가 많습니다.
로그 파싱 예시
\[(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})\] \[(ERROR|WARN)\] (.+)
테스터에 실제 로그 20줄을 넣고, capture group이 기대와 일치하는지 확인한 뒤 코드에 복사하세요.
성능
중첩 quantifier ((a+)+$)는 ReDoS 위험이 있습니다. 긴 입력은 길이 제한 후 regex를 적용하세요.
팀 패턴 라이브러리
승인된 regex를 lib/validation/patterns.ts에 comment와 sample로 모으면, PR review에서 새 regex invent를 줄일 수 있습니다. email·phone은 lib 것만 import하는 rule을 lint로 걸 수 있습니다.
국제 phone·email은 locale별로 pattern을 분리하세요. 한 regex로 global을 커버하려 하면 false negative가 늘고, support ticket이 regex bug로 misclassified됩니다.
user input validation은 regex match success 후 server-side duplicate check까지 pair하는 pattern이 production-safe합니다.