회원가입 폼에서 이메일 유효성을 검사하는 정규식을 작성했다. 그런데 user@domain은 통과하고 [email protected]은 막히는 문제가 생겼다. 패턴이 어디서 틀렸는지 코드를 수정하고 다시 실행하는 걸 반복하면 시간이 오래 걸린다.
정규식을 실시간으로 테스트하는 법
정규식 테스터에 패턴을 입력하고 아래에 테스트 문자열을 넣으면 매칭 결과가 실시간으로 표시된다. 매칭된 부분은 초록색으로 하이라이트되고, 패턴에 오류가 있으면 빨간색으로 알려준다. 코드를 돌려볼 필요 없이 패턴을 고치면서 바로 확인할 수 있다.
자주 쓰는 정규식 패턴
| 용도 | 패턴 예시 | 매칭 대상 |
|---|---|---|
| 이메일 | [a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,} | [email protected] |
| 전화번호 | 01[016789]-\d{3,4}-\d{4} | 010-1234-5678 |
| 한글만 | [가-힣]+ | 안녕하세요 |
| 숫자만 | \d+ | 12345 |
이 패턴들은 프리셋 버튼으로 클릭 한 번에 입력할 수도 있다. 프리셋에 이메일, URL, 전화번호, 한글, 숫자, 사용자명이 포함되어 있다.
플래그 설정으로 매칭 범위 조절하기
- g (global)
- 첫 번째 매칭만이 아니라 전체 텍스트에서 모든 매칭을 찾는다. 대부분의 경우 켜놓는 게 편하다.
- i (ignore case)
- 대소문자를 구분하지 않는다. 이메일 도메인처럼 대소문자가 섞일 수 있는 입력에 유용하다.
- m (multiline)
- 여러 줄 텍스트에서 각 줄의 시작(^)과 끝($)을 인식한다.
- s (dotAll)
- 점(.)이 줄바꿈 문자도 매칭하게 된다. HTML 태그 사이 내용을 추출할 때 필요할 수 있다.
TIP 캡처 그룹을 쓰면 매칭된 텍스트의 특정 부분만 뽑아낼 수 있다. 예를 들어 전화번호 패턴에서 (\d{3})-(\d{4})-(\d{4})로 작성하면 지역번호, 중간 번호, 끝 번호를 각각 그룹으로 분리해준다.
정규식은 작성보다 디버깅에 시간이 더 많이 든다. 실시간 테스터로 패턴을 수정하면서 바로 결과를 확인하면 그 시간을 크게 줄일 수 있다.