회원가입 폼에서 이메일 형식이 맞는지, 전화번호에 숫자만 들어왔는지 확인하려면 정규표현식(Regular Expression, regex)을 써야 한다. 처음 보면 암호처럼 보이지만, 기본 문법 몇 가지만 알면 실무에 바로 쓸 수 있다.
정규식 기본 문법
| 패턴 | 의미 | 예시 |
|---|---|---|
. | 아무 문자 1개 | a.c → abc, a1c, a@c |
\d | 숫자 (0~9) | \d{3} → 010, 123 |
\w | 영문, 숫자, 밑줄 | \w+ → hello, user_1 |
\s | 공백 (스페이스, 탭, 줄바꿈) | \s → 띄어쓰기 |
^ | 문자열 시작 | ^Hello → Hello로 시작 |
$ | 문자열 끝 | end$ → end로 끝남 |
* | 0회 이상 반복 | ab*c → ac, abc, abbc |
+ | 1회 이상 반복 | ab+c → abc, abbc (ac 불가) |
? | 0회 또는 1회 | colou?r → color, colour |
{n,m} | n~m회 반복 | \d{2,4} → 12, 123, 1234 |
[abc] | a, b, c 중 하나 | [aeiou] → 모음 1개 |
(A|B) | A 또는 B | (cat|dog) → cat, dog |
실무에서 자주 쓰는 패턴
이메일 검증
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
@ 앞에 영문·숫자·일부 특수문자, @ 뒤에 도메인, 마지막에 .com 같은 최상위 도메인이 오는 구조를 확인한다.
한국 전화번호
^01[016789]-?\d{3,4}-?\d{4}$
010, 011, 016, 017, 018, 019로 시작하고, 하이픈(-) 유무에 관계없이 매칭된다.
한글만 허용
^[가-힣]+$
이름 입력란에 한글만 받고 싶을 때 쓴다. 영문, 숫자, 특수문자가 포함되면 매칭 실패.
URL 검증
^https?:\/\/[\w.-]+\.[a-zA-Z]{2,}(\/\S*)?$
http 또는 https로 시작하는 URL 형식을 검증한다.
플래그(옵션)란
패턴 뒤에 붙는 옵션으로, 매칭 방식을 조절한다.
g(global): 첫 번째 매칭만이 아니라 전체에서 모두 찾기i(case-insensitive): 대소문자 구분 안 함m(multiline): ^와 $를 각 줄의 시작/끝으로 처리s(dotAll): .이 줄바꿈 문자도 매칭
패턴을 테스트하는 습관
정규식은 한 글자만 틀려도 의도와 다르게 동작한다. 코드에 적용하기 전에 반드시 테스트 텍스트를 넣어서 매칭 결과를 확인해야 한다. 정규식 테스터에 패턴과 텍스트를 넣으면 매칭된 부분이 실시간으로 하이라이트되고, 캡처 그룹 정보까지 상세하게 보여준다. 이메일, URL, 전화번호, 한글 같은 자주 쓰는 패턴은 프리셋으로 제공되어 바로 불러올 수 있다.
TIP 정규식이 복잡해지면 가독성이 급격히 떨어진다. 하나의 패턴이 3줄을 넘어가면, 여러 개의 간단한 패턴으로 분리해서 단계별로 검증하는 편이 유지보수에 유리하다.
정규식은 외우는 게 아니라 필요할 때 찾아서 쓰는 거다. 기본 문법만 익혀두면 나머지는 테스트하면서 조합하면 된다.