본문 바로가기

개발/javascript

입력 폼 체크

<!DOCTYPE HTML>
<HTML>
<HEAD>
<TITLE> 입력 폼 체크 </TITLE>
</HEAD>
<BODY>
<h1>입력 폼 체크</h1>
<form method="post" onsubmit="return validForm(this);">
	<legend>기본정보</legend>
	<label>이름 <input type="text" name="username" id="username" /></label>
	<label>비밀번호 <input type="password" name="userpw" id="userpw" /></label>
	<label>비밀번호 확인 <input type="password" name="userpw_confirm" id="userpw_confirm" /></label>
	<label>e-mail <input type="text" name="email" id="email" /></label>
	<input type="submit" value="입력완료" />
</form>

<script type="text/javascript">
/**
 * 입력을 완료하고자 할 때 값의 유효성을 확인한다.
 * 만약, 조건에 부합하지 않으면 계속 진행 할 수 없다.
 * @param {Object} form 입력폼 객체
 * @return 정상진행 여부
 * @type Boolean
 */
function validForm(form){
	// '이름' 항목 입력 여부 검사
	if(form.username.value == ""){
		alert("이름을 입력하세요!");
		form.username.focus();	//이름 입력란으로 마우스 포커스를 이동
		return false;			// 폼 전송을 계속 진행할 수 없음
	}
	
	// '이름' 항목 길이 제한
	var namelength = getByteLength(form.username.value);
	if( namelength < 2 || namelength > 20){
		alert("이름은 한글 1~10자 영문 대소문자 2~20자 최대 20 bytes 사용이 가능합니다.");
		form.username.focus();
		return false;
	}

	// '비밀번호' 항목 입력 여부 검사
	if(form.userpw.value == ""){
		alert("비밀번호를 입력하세요!");
		form.userpw.focus();
		return false;
	}

	// '비밀번호 확인' 항목 입력 여부 검사
	if(form.userpw_confirm.value == ""){
		alert("비밀번호 확인을 입력하세요!");
		form.userpw_confirm.focus();
		return false;
	}
	
	// '비밀번호' & '비밀번호 확인'의 동일 여부 검사
	if(form.userpw.value != form.userpw_confirm.value){
		alert("비밀번호와 비밀번호 확인 값이 동일해야 합니다.");
		form.userpw.focus();
		return false;
	}

	// 'e-mail' 입력값 형식 검사
	var regExp = /^[0-9a-zA-Z][0-9a-zA-Z_\-\.]*@[0-9a-zA-Z_\-\.]+[0-9a-zA-Z_\-\.]{2,}$/;
	if(!regExp.test(form.email.value)){
		alert("이메일 형식이 유효하지 않습니다. 예) abc@abc.com");
		form.email.focus();
		return false;
	}

	alert("모든 입력이 정상적으로 완료 되었습니다.");
	return true; // 폼 전송 정상 진행
}

/**
 * 한글 2byte, 그외의 문자 1byte로 계산하여 문자열의 길이를 반환
 * @param str 문자열
 * @return 주어진 문자열의 byte단위 길이
 * @type number
 */
function getByteLength(str) {
    var byteLength = 0;
    for (var inx = 0; inx < str.length; inx++) {
        var oneChar = escape(str.charAt(inx));
        if ( oneChar.length == 1 ) {
            byteLength ++;
        } else if (oneChar.indexOf("%u") != -1) {
            byteLength += 2;
        } else if (oneChar.indexOf("%") != -1) {
            byteLength += oneChar.length/3;
        }
    }
    return byteLength;
}
</script>
</BODY>
</HTML>