본문 바로가기
Mechanic: IT 인터넷/Mechanic, M-Tech

JavaScript 이메일 형식 체크와 한글 입력 검증 - 정규식 vs charCode

by M-LOG : 엠로그 2014. 4. 8.
반응형

원본 작성일: 2014.04.08
보완 작성일: 2026.02.14

JavaScript 이메일 유효성 검사 한글 입력 제한

이메일 입력 필드에서 형식을 체크하고, 한글 입력을 차단하는 JavaScript 검증 함수를 정리한 글이다.

한글 포함 여부 검사

원본 코드는 문자의 유니코드 범위를 직접 확인하는 방식이다.

function isKorean(str) {
    for (var i = 0; i < str.length; i++) {
        var code = str.charCodeAt(i);
        // 한글 자모 (ㄱ~ㅎ, ㅏ~ㅣ): 0x3130 ~ 0x318F
        // 한글 완성형 (가~힣): 0xAC00 ~ 0xD7A3
        if ((code > 0x3130 && code < 0x318F) ||
            (code >= 0xAC00 && code <= 0xD7A3)) {
            return true;  // 한글 포함
        }
    }
    return false;  // 한글 없음
}

isKorean('test@email.com');   // false
isKorean('테스트@email.com');  // true

정규식으로 간단하게

function isKorean(str) {
    return /[ㄱ-ㅎㅏ-ㅣ가-힣]/.test(str);
}

한 줄이면 같은 결과를 얻을 수 있다.

이메일 형식 검사

간단한 방식 (원본)

@.의 존재 여부만 확인하는 최소한의 검증이다.

function checkEmail(email) {
    if (!email) return true;  // 선택 필드면 빈 값 허용

    var atIndex = email.indexOf('@');
    if (atIndex < 1) return false;  // @ 없거나 맨 앞

    var afterAt = email.substring(atIndex + 1);
    if (!afterAt) return false;  // @ 뒤에 값 없음

    if (afterAt.indexOf('.') < 1) return false;  // . 없거나 맨 앞

    return true;
}

정규식 방식

function checkEmail(email) {
    var regex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
    return regex.test(email);
}

checkEmail('user@example.com');    // true
checkEmail('user@.com');           // false
checkEmail('user@example');        // false

이 정규식은 완벽하지는 않지만 실무에서 충분한 수준이다. RFC 5322 완전 준수 정규식은 수백 자에 달하고 오히려 유지보수가 어렵다.

HTML5로 해결하기

<input type="email" required placeholder="이메일을 입력하세요" />

type="email"을 사용하면 브라우저가 기본적인 이메일 형식 검증을 해준다. submit 시 자동으로 체크되고, 모바일에서는 @ 키가 포함된 키보드가 뜬다.

주의: 프론트엔드 검증의 한계

프론트엔드 검증은 UX 개선 목적이다. 보안이나 데이터 무결성을 위한 검증은 반드시 서버에서 해야 한다. JavaScript 검증은 개발자 도구에서 쉽게 우회할 수 있다.

프론트엔드: "이메일 형식이 아닙니다" → 사용자 편의
백엔드: 이메일 형식 + 중복 체크 + SQL Injection 방어 → 보안
반응형