입력 폼에서 이메일 형식이 맞는지 검증하려면 정규표현식(Regular Expression)이 필요하다. 처음 보면 /^[a-zA-Z0-9]+@[a-z]+\.[a-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 |
\d | 숫자 (0-9) | \d{3} → 123, 456 |
\w | 영숫자 + 밑줄 | \w+ → hello, user_01 |
[abc] | a, b, c 중 하나 | [aeiou] → 모음 |
^ | 문자열 시작 | ^Hello → Hello로 시작하는 줄 |
$ | 문자열 끝 | end$ → end로 끝나는 줄 |
자주 쓰는 패턴 5가지
1. 이메일 주소
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
@ 앞에 영숫자와 일부 특수문자, @ 뒤에 도메인, 마지막에 2자 이상의 영문자(com, kr 등)를 검증한다.
2. 한국 전화번호
^01[016789]-?\d{3,4}-?\d{4}$
010, 011, 016, 017, 018, 019로 시작하고, 하이픈은 있어도 되고 없어도 되게 -?로 처리한다.
3. 한글만 추출
[가-힣]+
완성된 한글 글자만 매칭한다. 자음/모음 낱자(ㄱ, ㅏ)는 포함되지 않는다. 낱자까지 잡으려면 [가-힣ㄱ-ㅎㅏ-ㅣ]로 확장하면 된다.
4. URL
https?://[\w.-]+(/[\w./?&=-]*)?
http 또는 https로 시작하고 도메인 뒤에 경로가 올 수 있는 구조다. 완벽한 URL 검증은 아니지만 대부분의 경우 충분하다.
5. 숫자에 쉼표 넣기 (치환)
\B(?=(\d{3})+(?!\d))
1000000을 1,000,000으로 바꿀 때 쓰는 패턴이다. 치환 문자열로 ,를 넣으면 된다.
패턴 테스트하는 법
정규식은 작성보다 검증이 중요하다. 의도하지 않은 문자열이 매칭되거나 빠지는 경우가 흔하다. 정규식 테스터에 패턴을 입력하고 테스트 문자열을 넣으면 매칭 결과가 실시간으로 하이라이트된다.
캡처 그룹별 매칭 내용과 위치 정보도 나오고, g/i/m/s 플래그를 토글로 바로 전환할 수 있어서 코드에 적용하기 전에 동작을 확인하기 좋다.
주의 정규식은 언어마다 문법이 조금씩 다르다. JavaScript, Python, Java에서 같은 패턴이 다르게 동작할 수 있다. 테스터 사이트는 대부분 JavaScript 엔진 기반이므로, 다른 언어에서 쓸 거라면 해당 언어 문서를 참고할 것.
정규식은 처음에 진입 장벽이 높지만, 기본 기호 10개만 외우면 대부분의 실무 패턴을 읽고 수정할 수 있다. 나머지는 테스트하면서 다듬으면 된다.