회원가입 폼에서 이메일 형식을 검증해야 하는데, if문으로 @가 있는지, .이 있는지 일일이 확인하는 코드를 쓰고 있었다. 정규표현식 한 줄이면 끝나는 걸 열 줄 넘게 작성하고 있었던 거다.
정규식 기본 문법 요약
| 패턴 | 의미 | 예시 |
|---|---|---|
. | 아무 문자 1개 | a.c → abc, a1c, a-c |
\d | 숫자 (0~9) | \d{3} → 010, 123 |
\w | 영문, 숫자, 밑줄 | \w+ → hello, test_1 |
\s | 공백 문자 | \s+ → 공백, 탭, 줄바꿈 |
+ | 1회 이상 반복 | a+ → a, aa, aaa |
* | 0회 이상 반복 | ab* → a, ab, abb |
? | 0회 또는 1회 | colou?r → color, colour |
{n,m} | n~m회 반복 | \d{2,4} → 12, 123, 1234 |
^ | 문자열 시작 | ^Hello → Hello로 시작하는 줄 |
$ | 문자열 끝 | end$ → end로 끝나는 줄 |
실무에서 바로 쓰는 정규식 패턴
이메일 검증
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
@ 앞에 영문/숫자/특수문자, 뒤에 도메인과 최소 2자리 확장자가 오는 구조다.
한국 휴대폰 번호
^01[016789]-?\d{3,4}-?\d{4}$
010, 011, 016, 017, 018, 019로 시작하고, 하이픈 유무와 관계없이 매칭된다.
한글만 허용
^[가-힣]+$
완성된 한글 글자만 통과한다. 자음/모음만 단독으로 입력하면 걸러진다.
URL 패턴
https?:\/\/[\w\-]+(\.[\w\-]+)+[\/\w\-.?=%]*
http 또는 https로 시작하는 URL을 매칭한다.
주의 정규식으로 이메일이나 URL을 완벽하게 검증하는 건 사실상 불가능하다. 위 패턴은 대부분의 일반적인 케이스를 커버하지만, 엣지 케이스까지 잡으려면 라이브러리를 쓰는 게 낫다. 정규식은 1차 필터 용도로 활용하는 것이 현실적이다.
정규식을 빠르게 테스트하는 법
패턴을 작성하고 코드에 넣기 전에 먼저 테스트해보는 게 좋다. 예상과 다르게 매칭되거나, 특정 입력에서 걸러지지 않는 경우가 생각보다 많다. 정규식 테스터에 패턴과 테스트 문자열을 넣으면 매칭 결과가 실시간으로 하이라이트된다. 플래그(g, i, m) 선택과 캡처 그룹 확인도 가능하고, 이메일/전화번호 같은 프리셋 패턴을 바로 불러올 수도 있다.
정규식은 처음 배울 때 어렵지만, 패턴 몇 개만 익혀두면 문자열 처리 코드가 눈에 띄게 짧아진다. 위의 기본 문법표를 북마크해두고 필요할 때 참고하면 된다.