ToolHub
View All Posts

모든 개발자가 마스터해야 할 정규식 패턴

정규식(regex)은 개발자 도구 상자에서 가장 강력한 도구 중 하나입니다. 절차적 코드로는 수십 줄이 필요한 작업을 간결한 패턴으로 텍스트를 검색, 검증 및 변환할 수 있습니다. 정규식 구문이 처음에는 난해해 보일 수 있지만, 핵심 패턴 세트를 마스터하면 대부분의 실제 사용 사례를 다룰 수 있습니다. 이 가이드는 반복적으로 사용하게 될 정규식 패턴을 소개하고 각 패턴의 작동 방식을 자세히 설명합니다.

정규 표현식 기초 복습

구체적인 패턴을 살펴보기 전에, 모든 정규식 패턴의 기초를 구성하는 메타문자를 빠르게 복습해 보겠습니다:

메타문자의미예제
.임의의 단일 문자a.c는 abc, a1c, a c와 매칭
*앞 문자 0회 이상ab*c는 ac, abc, abbc와 매칭
+앞 문자 1회 이상ab+c는 abc, abbc와 매칭
?앞 문자 0회 또는 1회colou?r는 color, colour와 매칭
^문자열 시작^Hello는 시작 부분의 Hello와 매칭
$문자열 끝world$는 끝 부분의 world와 매칭
[]문자 클래스[aeiou]는 모든 모음 문자와 매칭
()캡처 그룹(ab)+는 ab, abab과 일치
|교체 (OR)cat|dog는 cat 또는 dog와 매칭
\d숫자 [0-9]\d{3}는 123과 매칭
\w단어 문자 [a-zA-Z0-9_]\w+는 hello_123과 매칭
\s공백 문자a\sb는 a b와 매칭

1. 이메일 검증

기본 이메일 패턴

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

이 패턴은 이메일 주소의 기본 구조를 검증합니다: @ 앞에 하나 이상의 허용된 문자, 그 뒤에 최소 하나의 점이 있는 도메인 이름, 그리고 두 글자 이상의 최상위 도메인. 대부분의 유효하지 않은 형식을 포착하면서 합법적인 주소는 통과시킵니다.

매칭: user@example.com, john.doe+tag@company.co.uk

매칭 안 됨: user@, @example.com, user@.com

중요 참고: 어떤 정규식도 RFC 5322의 모든 유효한 이메일 주소를 완벽하게 검증할 수 없습니다. 이 패턴을 기본 형식 검사에 사용한 다음 확인 이메일을 보내 주소를 검증하세요. 프로덕션 애플리케이션의 경우 정규식 검증과 도메인 검증을 결합하여 사용하세요.

2. URL 검증

HTTP/HTTPS URL 패턴

^https?:\/\/(www\.)?[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}(\/[^\s]*)?$

이 패턴은 선택적 www 접두사가 있는 HTTP 및 HTTPS URL을 매칭하며, 도메인 이름과 선택적 경로를 포함합니다. s?는 https의 "s"를 선택적으로 만들고, (www\.)?는 www 접두사를 선택적으로 만듭니다. 경로 세그먼트 (\/[^\s]*)?는 도메인 이름 뒤에 공백 문자가 아닌 모든 문자를 허용합니다.

매칭: https://example.com, http://www.example.com/path/to/page

매칭 안 됨: ftp://example.com, example.com (프로토콜 없음)

3. 전화번호 검증

국제 전화번호

^\+?[1-9]\d{1,14}$

이 패턴은 E.164 국제 전화번호 형식을 따릅니다. 선택적 + 접두사를 허용하고, 첫 번째 숫자가 1-9(선행 0 없음)여야 하며, 총 최대 15자리 숫자를 허용합니다. 이는 국제적으로 전화번호를 저장하고 검증하는 가장 신뢰할 수 있는 형식입니다.

매칭: +14155552671, 442071838750

매칭 안 됨: +01xxxxxxxxx, 123

4. 비밀번호 강도

강력한 비밀번호 패턴

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

이 패턴은 강력한 비밀번호 정책을 강제합니다: 최소 8자, 최소 하나의 소문자, 하나의 대문자, 하나의 숫자 및 하나의 특수 문자 포함. (?=.*[...]) 구문은 긍정적 전방 탐색을 사용하여 각 문자 유형의 존재를 확인하며 문자를 소비하지 않습니다.

매칭: MyP@ss1word, Str0ng!Pass

매칭 안 됨: password, Password1, P@ss

정상 시력으로만 테스트하기: 색맹 시뮬레이터를 사용하여 적색맹, 녹색맹, 청색맹(가장 흔한 세 가지 색각 결함 유형) 사용자에게 디자인이 사용 가능한지 확인하세요.

IPv4 주소

^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$

이 패턴은 IPv4 주소를 검증하고 올바른 범위 검사를 수행합니다. 각 옥텟은 0에서 255 사이여야 합니다. 이 패턴은 교체 매칭을 사용합니다: 250-255(25[0-5]), 200-249(2[0-4]\d) 또는 0-199([01]?\d\d?). 이는 세 개의 점 뒤에 세 번 반복되고, 마지막으로 최종 옥텟에 한 번 더 사용됩니다.

매칭: 192.168.1.1, 10.0.0.1, 255.255.255.0

매칭 안 됨: 256.1.1.1, 192.168.1, 192.168.1.1.1

6. 날짜 형식 검증

YYYY-MM-DD (ISO 8601)

^\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])$

이 패턴은 ISO 8601 형식(YYYY-MM-DD)의 날짜를 검증합니다. 4자리 연도, 01-12 사이의 월, 01-31 사이의 일을 확인합니다. 이 패턴은 형식은 검증하지만 날짜의 논리적 유효성은 검증하지 않습니다(예: 2026-02-31 허용). 완전한 검증을 위해서는 날짜를 구문 분석하고 프로그래밍 방식으로 확인하세요.

매칭: 2026-05-20, 2025-01-01, 2024-12-31

매칭 안 됨: 2026-5-20, 2026-13-01, 26-05-20