본문 바로가기
Etc2026년 6월 29일3분 읽기

개발자 정규식 실전 — 이메일·URL·날짜 검증 패턴

YS
김영삼
조회 661
개발자 정규식 실전 — 이메일·URL·날짜 검증 패턴

핵심 요약

입력 검증 정규식의 핵심은 "완벽하게"가 아니라 실용적으로다. 이메일을 RFC 5322 완벽 준수로 잡으려다 정상 주소를 막는 것보다, 느슨하게 형식만 확인하고 실제 확인은 인증 메일로 하는 게 낫다. 자주 쓰는 검증 패턴을 정리한다.

1. 이메일 — 느슨하게가 정답

^[^\s@]+@[^\s@]+\.[^\s@]+$

"@ 앞뒤에 공백 아닌 게 있고, 뒤에 점과 도메인이 있다" 정도면 충분하다. 진짜 유효성은 인증 메일 발송으로 확인한다.

2. URL

^https?:\/\/[^\s/$.?#].[^\s]*$

http/https로 시작하는지만 본다. 더 엄격히 하면 정상 URL을 막기 쉽다. 브라우저 환경이면 new URL(str)의 예외로 검증하는 게 더 견고하다.

3. 비밀번호 강도 — 전방탐색 활용

// 8자 이상, 영문·숫자·특수문자 각 1개 이상
^(?=.*[A-Za-z])(?=.*\d)(?=.*[^A-Za-z0-9]).{8,}$

(?=...)는 "그 위치 뒤에 이런 게 있다"만 확인하고 커서를 안 옮기는 전방탐색이다. 조건을 AND로 겹칠 때 쓴다.

4. 날짜·전화번호

대상패턴
YYYY-MM-DD^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$
휴대폰^01[016-9]-?\d{3,4}-?\d{4}$
사업자번호^\d{3}-\d{2}-\d{5}$

날짜는 정규식으로 월·일 범위까지는 잡되, 2월 30일 같은 실제 유효성은 날짜 라이브러리로 확인한다.

5. 함정

  • 정규식으로 "완벽한 이메일 검증"은 불가능에 가깝다 — 느슨하게 + 인증 메일
  • 사용자 입력을 서버에서 반드시 다시 검증(프론트 검증은 우회 가능)
  • 복잡한 전방탐색 남발은 유지보수를 해친다 — 조건이 많으면 코드로 나눠 검증

자주 묻는 질문

이메일 정규식은 왜 느슨하게 쓰나요?

RFC를 완벽히 따르는 정규식은 수백 자에 달하고, 그래도 a@b.co.kr 같은 정상 주소를 실수로 막기 쉽습니다. 형식만 가볍게 확인하고 실제 존재 여부는 인증 메일로 검증하는 게 현업 표준입니다.

전방탐색 (?=...)이 정확히 뭘 하나요?

"현재 위치 뒤에 이 패턴이 존재하는가"만 검사하고 매칭 위치는 그대로 둡니다. 덕분에 "영문도 있고 숫자도 있고 특수문자도 있다"처럼 순서와 무관한 여러 조건을 한 정규식에 AND로 겹칠 수 있습니다.

프론트에서 검증했으면 서버 검증은 생략해도 되나요?

절대 안 됩니다. 프론트 검증은 UX용이고, 공격자는 API를 직접 호출해 우회합니다. 보안·데이터 정합성은 서버 검증이 최종 방어선입니다.

댓글 0

아직 댓글이 없습니다.
Ctrl+Enter로 등록