유틸리티

정규표현식 기초, 자주 쓰는 패턴 모음 (이메일, 전화번호, 한글)

회원가입 폼에서 이메일 형식이 맞는지 검증하라는 요구사항을 받았다. if문으로 @가 있는지, 점이 있는지 하나씩 체크할 수도 있지만, 정규표현식 한 줄이면 훨씬 깔끔하게 처리된다. 문제는 정규식 문법이 처음 보면 암호 같다는 것이다.

정규표현식(Regex)이란

문자열에서 특정 패턴을 찾거나, 치환하거나, 유효성을 검증하기 위한 표현 언어다. 거의 모든 프로그래밍 언어에서 지원한다.

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

이게 이메일 검증 정규식의 기본 형태다. 처음에는 읽기 어렵지만, 구성 요소를 하나씩 뜯어보면 규칙이 있다.

기본 문법 정리

기호의미예시
.아무 문자 1개a.c → abc, a1c, a-c
*앞 문자 0회 이상 반복ab*c → ac, abc, abbc
+앞 문자 1회 이상 반복ab+c → abc, abbc (ac는 안 됨)
?앞 문자 0회 또는 1회colou?r → color, colour
^문자열 시작^Hello → Hello로 시작하는 문자열
$문자열 끝end$ → end로 끝나는 문자열
[abc]a, b, c 중 하나[aeiou] → 모음 1개
[0-9]숫자 0~9[0-9]+ → 연속된 숫자
\d숫자 (=[0-9])\d{3} → 숫자 3자리
\w영문+숫자+밑줄\w+ → 단어

실무에서 바로 쓰는 패턴 모음

이메일 검증

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

@앞에 영문+숫자+특수문자, @뒤에 도메인, 마지막에 최소 2자리 이상의 TLD를 요구한다.

한국 전화번호

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

010, 011, 016, 017, 018, 019로 시작하고 하이픈은 있어도 되고 없어도 된다.

한글만

/^[가-힣]+$/

한글 완성형 글자만 허용한다. ㄱ, ㅎ 같은 자음/모음은 포함되지 않는다.

URL

/https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z]{2,}([-a-zA-Z0-9@:%_+.~#?&/=]*)/
주의 이메일이나 URL의 정규식은 완벽하지 않다. RFC 표준에 따르면 허용되는 형식이 훨씬 복잡하기 때문에, 위 패턴은 일반적인 경우에만 유효하다. 100% 정확한 검증이 필요하면 라이브러리를 쓰는 게 안전하다.

정규식 작성 시 실수를 줄이는 법

정규식은 한 글자만 틀려도 전혀 다른 결과가 나온다. 코드에 넣기 전에 테스트 문자열로 확인하는 게 필수다. 정규식 테스터에 패턴을 넣고 테스트 문자열을 입력하면 매칭 결과가 실시간으로 하이라이트된다. 캡처 그룹의 내용과 위치(인덱스)도 표시되니까 복잡한 패턴을 디버깅할 때 편하다. 이메일, URL, 전화번호, 한글 프리셋도 버튼 하나로 불러올 수 있다.

정규표현식은 처음에만 어렵다. 기본 문법 10개만 외우면 실무에서 쓰이는 패턴의 대부분을 이해할 수 있고, 직접 만들 수도 있게 된다.