99% 패턴
진짜 이메일 정규식 (RFC 5322 호환) 은 6,000 자 넘고 중첩 주석, quoted 문자열, IP 리터럴, Unicode 포함. 작성 시도 X. 합리적 production 기본은:
^[\w.+-]+@[\w-]+\.[\w.-]+$
왼쪽에서 오른쪽:
[\w.+-]+— local part: word 글자 + . + -@— 리터럴 at[\w-]+— 도메인 라벨 (안에 점 X)\.— 리터럴 점[\w.-]+— 서브도메인과 하이픈 허용 TLD
이게 잡는 거
오타: 빠진 @, 빠진 TLD, 주소의 공백, 완전히 invalid 한 모양. "이게 이메일?" 사용 케이스의 약 95%.
이게 MISS 하는 거 (그래서 OK)
- Quoted local part:
"hello world"@example.com— 스펙상 유효, 거의 안 쓰임. - IP-리터럴 도메인:
user@[192.168.1.1]— 동일. - 비-ASCII Unicode local part:
유저@한국.kr— Unicode 플래그 + 조정된 character class 필요. - 이메일이 실제로 존재하나.
진짜 "이 이메일 동작?" — 검증 메시지 발송. 정규식은 그거 못 알려줘.
HTML5 대안
브라우저 내장 type="email" 검증이 약간 더 permissive 한 정규식 사용. 브라우저면 그냥 사용: <input type="email" required>. 정규식 통째로 절약.