차근차근/JAVA Script

유효성 검사 함수 모음

예쁜꽃이피었으면 2015. 6. 8. 09:26

http://www.kukkiwon.or.kr/kwinc/js/tsadmin/validate.js?ver=1.0




//********************************************************//
//	  Validate Class Ver. 1.0
//  작성자 : 정병태
//  작성일 : 2007-12-10
//	
//********************************************************//

///////////////////////////////////////////////////////////////////////////////////////
//   유효성 검사 함수 모음
///////////////////////////////////////////////////////////////////////////////////////
var Validate = {

	// 공백값 체크
	isNull : function(value) {
		return value.blank() ? true : false;
	},

	//아이디 패턴검사 (영문소문자/숫자 조합 4~12자리면 "TRUE", 아니면 "FALSE")
	isId : function(value) {	
		if(Validate.isNull(value)) return true;			// 값이 공백일 경우에는 검사를 하지않고 "TRUE"를 리턴
		var filter = /^[a-z\d]{5,12}$/;	
		var filter2 = /[a-z]/;
		//var filter3 = /[\d]/;
		return ((filter.test(value) && filter2.test(value))) ?  true : false;
	},
	
	// 비밀번호 패턴검사 (영문소문자/숫자 조합 6~14자리면 "TRUE", 아니면 "FALSE")
	isPassword : function(value) {
		if(Validate.isNull(value)) return true;			// 값이 공백일 경우에는 검사를 하지않고 "TRUE"를 리턴
		var filter = /^[a-z\d]{6,14}$/;
		var filter2 = /[a-z]/;
		var filter3 = /[\d]/;
		return ((filter.test(value) && filter2.test(value) && filter3.test(value))) ?  true : false;
	},
	
	// 비밀번호 패턴검사 (4~12자리면 "TRUE", 아니면 "FALSE")
	isPasswordNum : function(value) {
		if(Validate.isNull(value)) return true;			// 값이 공백일 경우에는 검사를 하지않고 "TRUE"를 리턴
		var filter = /^[a-z\d]{6,14}$/;
		return filter.test(value) ?  true : false;
	},

	//이메일 패턴검사 (이메일주소면 "TRUE", 아니면 "FALSE")
	isEmail : function(value) {
		if(Validate.isNull(value)) return true;			// 값이 공백일 경우에는 검사를 하지않고 "TRUE"를 리턴
		var filter=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
		return (filter.test(value)) ?  true : false;
	},
	
	// 한글만 유효 검사 (한글만 포함되어 잇으면 "TRUE", 다른 문자가 폼함되어 있으면 "FALSE")
	isKor : function(value) {
		if(Validate.isNull(value)) return true;			// 값이 공백일 경우에는 검사를 하지않고 "TRUE"를 리턴
		var filter=/^[ㄱ-힣]+$/;
		return (filter.test(value)) ?  true : false;
	},
	
	// 알파벳만 유효 검사 (알파벳만 포함되어 잇으면 "TRUE", 다른 문자가 폼함되어 있으면 "FALSE")
	isAlpha : function(value) {
		if(Validate.isNull(value)) return true;			// 값이 공백일 경우에는 검사를 하지않고 "TRUE"를 리턴
		var filter=/^[a-zA-Z]+$/;
		return (filter.test(value)) ?  true : false;
	},
	
	// 숫자만 유효 검사 (숫자만 포함되어 잇으면 "TRUE", 다른 문자가 폼함되어 있으면 "FALSE")
	isNum : function(value) {
		if(Validate.isNull(value)) return true;			// 값이 공백일 경우에는 검사를 하지않고 "TRUE"를 리턴
		var filter=/^[\d]+$/;
		return (filter.test(value)) ?  true : false;
	},

	// 날짜 유효 검사 (날짜형식(YYYY-MM-DD) "TRUE", 아니면 "FALSE")
	isDate : function(value) {
		if(Validate.isNull(value)) return true;			// 값이 공백일 경우에는 검사를 하지않고 "TRUE"를 리턴
		var filter=/^[\d]{4}\-[\d]{2}\-[\d]{2}$/;
		return (filter.test(value)) ?  true : false;
	},
	
	// 알파벳/숫자만 유효 검사 (알파벳과 숫자만 포함되어 잇으면 "TRUE", 다른 문자가 폼함되어 있으면 "FALSE")
	isAlphaNum : function(value) {
		if(Validate.isNull(value)) return true;			// 값이 공백일 경우에는 검사를 하지않고 "TRUE"를 리턴
		var filter=/^[\w]+$/;
		return (filter.test(value)) ?  true : false;
	},

	// 주민등록번호 유효 검사 (주민등록번호면 "TRUE", 아니면 "FALSE")
	isSSN : function(value) {
		try {
		if(Validate.isNull(value)) return true;			// 값이 공백일 경우에는 검사를 하지않고 "TRUE"를 리턴
		var ssn = value.replace("-","");
		var filter = /^[\d]{6}[1234][\d]{6}$/;
		if(!filter.test(ssn)) return false;

		var sex = parseInt(ssn.substr(6,1),10);
		var yy  = parseInt(sex > 2 ? "20"+ssn.substr(0,2) : "19"+ssn.substr(0,2),10);
		var mm  = parseInt(ssn.substr(2,2),10);
		var dd  = parseInt(ssn.substr(4,2),10);
		if(yy < 1900 || yy > 2100 || mm < 1 || mm > 12 || dd < 1 || dd > 31) return false;
		
		var chk = 0;
		for(var i = 0; i <=11; i++){
			chk = chk + (((i % 8) + 2) * parseInt(ssn.substring(i, i + 1),10));
		}
		
		return ((11 - (chk % 11)) % 10) == ssn.substr(12,1) ? true : false;
		} catch(e) {
			alert(e.description);
			return false;
		}
	},

	// 외국인등록번호 유효 검사 (주민등록번호면 "TRUE", 아니면 "FALSE")
	isFGN : function(value) {
		if(Validate.isNull(value)) return true;			// 값이 공백일 경우에는 검사를 하지않고 "TRUE"를 리턴
		var ssn = value.replace("-","");
		var filter = /^[\d]{6}[5678][\d]{6}$/;
		if(!filter.test(ssn)) return false;

		var sum = 0;
		var odd = 0;
		var buf = new Array(13);

		for(i = 0; i < 13; i++) {
			buf[i] = parseInt(ssn.charAt(i));
		}

		odd = buf[7]*10 + buf[8];
		if(odd%2 != 0) return false;
		if((buf[11] != 6)&&(buf[11] != 7)&&(buf[11] != 8)&&(buf[11] != 9)) return false;

		multipliers = [2,3,4,5,6,7,8,9,2,3,4,5];

		for (i = 0, sum = 0; i < 12; i++){
			sum += (buf[i] *= multipliers[i]);
		}

		sum = 11-(sum%11);
		if(sum >= 10) sum -= 10;
		sum += 2;
		if(sum >= 10) sum -= 10;
		return (sum == buf[12]) ? true : false ;
	},
	
	// 이미지파일만 유효 검사 (이미지면 "TRUE", 아니면 "FALSE")
	isImageFile : function(value) {
		if(Validate.isNull(value)) return true;			// 값이 공백일 경우에는 검사를 하지않고 "TRUE"를 리턴
		value = value.substr(value.lastIndexOf("\\")+1);
		var filter=/\.(jpg|gif|png|bmp)$/i;
		return (filter.test(value) && Validate.checkSpecialChar(value)) ?  true : false;
	},

	// 파일확장자 검사 (실행파일이 아니면 "TRUE", 실행파일이면 "FALSE")
	checkFileName : function(value) {
		if(Validate.isNull(value)) return true;			// 값이 공백일 경우에는 검사를 하지않고 "TRUE"를 리턴
		value = value.substr(value.lastIndexOf("\\")+1);
		var filter=/\.(asp|jsp|php|cgi|exe|sh|class)$/i;
		return (!filter.test(value) && Validate.checkSpecialChar(value)) ?  true : false;
	},
	
	// 특수문자 입력 검사 (특수문자가 포함되어 있지 않으면 "TRUE", 포함되어 잇으면 "FALSE")
	checkSpecialChar : function(value) {
		if(Validate.isNull(value)) return true;			// 값이 공백일 경우에는 검사를 하지않고 "TRUE"를 리턴
		var filter=/[#/:;'\"]/;
		var filter2=/[\-]{2}/;
		return (!filter.test(value) && !filter2.test(value)) ?  true : false;
	},
	
	// 특수문자 입력 검사 (특수문자가 포함되어 있지 않으면 "TRUE", 포함되어 잇으면 "FALSE")
	checkSpecialChar2 : function(value) {
		if(Validate.isNull(value)) return true;			// 값이 공백일 경우에는 검사를 하지않고 "TRUE"를 리턴
		var filter=/[\"]/;
		var filter2=/[\-]{2}/;
		return (!filter.test(value) && !filter2.test(value)) ?  true : false;
	},

	// 문자열 길이 검사 (문자열의 길이가 넘지 않으면 "TRUE", 넘으면 "FALSE")
	checkLength : function(value, min, max) {
		if(Validate.isNull(value)) return true;			// 값이 공백일 경우에는 검사를 하지않고 "TRUE"를 리턴
		return (value.length >= min && value.length <= max);
	},

	// 숫자범위 검사 (숫자범위가 넘지 않으면 "TRUE", 넘으면 "FALSE")
	checkRange : function(value, min, max) {
		if(Validate.isNull(value)) return true;			// 값이 공백일 경우에는 검사를 하지않고 "TRUE"를 리턴
		return (parseInt(value,10) >= min && parseInt(value,10) <= max);
	}

};

///////////////////////////////////////////////////////////////////////////////////////
//   ※ Validate.Form 를 통해서 사용한다.
//   해당 폼에 대한 유효성 검사를 처리하는 함수 모음
///////////////////////////////////////////////////////////////////////////////////////
Validate.Inpector = {

	ISNULL : function(form,options) {
		var name = Object.isArray(options.name) ? options.name[0] : options.name;
		var input = this.form[name].tagName ? this.form[name] : this.form[name][0];
		var type = input.tagName == "INPUT" ? input.type : input.tagName;
		var inspector = this[type.toUpperCase()].bind(this);
		return inspector(this.form,options);
	},

	// text/input/textarea 타입의 기본적인 공백체크
	TEXT : function(form, options) {
		var input = form[options.name];
		if (Validate.isNull(input.value)) {
			this.msg(input,options.text + getAux(options.text,1) +" 입력하세요.");
			return false;
		}
		return true;
	},

	HIDDEN : function(form, options){ return this.TEXT(form, options);},
	INPUT : function(form, options){ return this.TEXT(form, options);},
	TEXTAREA : function(form, options){ return this.TEXT(form, options);},
	FILE : function(form, options){ return this.TEXT(form, options);},
	PASSWORD : function(form, options){ return this.TEXT(form, options);},

	// select 타입의 선택된 option에 값이 없는지 체크
	SELECT : function(form, options) {
		var input = form[options.name];
		if (Validate.isNull(input.options[input.options.selectedIndex].value)) {
			this.msg(input,options.text + getAux(options.text,1) +" 선택하세요.");
			return false;
		}
		return true;
	},
	
	// radio 타입이 선택에 되어있는지 체크
	RADIO : function(form, options) {
		var input = form[options.name];
		for (i = 0; i < input.length; i++) {
			if (input[i].checked) return true;
		}
		this.msg(input[0],options.text + getAux(options.text,1) +" 선택하세요.");
		return false;
	},

	// checkbox 타입이 하나이상이 선택에 되어있는지 체크
	CHECKBOX : function(form, options) {
		var input;
		if(Object.isArray(options.name)) {
			input = new Array();
			for (i = 0; i < options.name.length; i++) {
				input[input.length] = form[options.name[i]];
			}
		} else {
			input = form[options.name];
		}

		for(i=0;i<input.length;i++) if(input[i].checked) return true;
		this.msg(input[0],options.text + getAux(options.text,1) +" 선택하세요.");
		return false;
	},

	// file 타입의 확장자가 이미지 파일인지를 체크한다.
	FILENAME : function(form, options){ 
		var input = form[options.name];
		if(!Validate.checkFileName(input.value)) {
			this.msg(input,options.text + getAux(options.text,2) +" 허용되지않는 확장자이거나, 파일명에 특수문자가 포함되어 있습니다.");
			return false;
		}
		return true;
	},

	// file 타입의 확장자가 이미지 파일인지를 체크한다.
	IMAGE : function(form, options){ 
		var input = form[options.name];
		if(!Validate.isImageFile(input.value)) {
			this.msg(input,options.text + getAux(options.text,2) +" 이미지 파일이 아니거나, 파일명에 특수문자가 포함되어 있습니다.");
			return false;
		}
		return true;
	},
	
	// 회원아이디 유효성 검사
	USERID : function(form,options) {
		var input = form[options.name];
		if(!this.TEXT(form, options)) return false;
		if(!Validate.isId(input.value)) {
			this.msg(input,options.text + getAux(options.text,3) +" 유효하지 않습니다.\n\n영문소문자와 숫자 조합 5~12자 이내로 입력하세요.");
			return false;
		}
		return true;
	},
	
	// 비밀번호 유효성 검사
	USERPWD : function(form,options) {
		var input = form[options.name];
		if(!this.TEXT(form, options)) return false;
		if(!Validate.isPassword(input.value)) {
			this.msg(input,options.text + getAux(options.text,3) +" 유효하지 않습니다.\n\n영문소문자와 숫자 조합 6~14자 이내로 입력하세요.");
			return false;
		}
		return true;
	},
	
	// 비밀번호 유효성 검사
	USERPWDNUM : function(form,options) {
		var input = form[options.name];
		if(!this.TEXT(form, options)) return false;
		if(!Validate.isPasswordNum(input.value)) {
			this.msg(input,options.text + getAux(options.text,3) +" 유효하지 않습니다. 6~14자 이내로 입력하세요.");
			return false;
		}
		return true;
	},

	// 이메일 유효성 검사
	EMAIL : function(form,options) {
		var input = new Array();
		var value = "";
		if(Object.isArray(options.name)) {
			for (i = 0; i < 2; i++) {
				input[input.length] = form[options.name[i]];
				if (Validate.isNull(input[input.length-1].value)) {
					this.msg(input[input.length-1],options.text + getAux(options.text,1) +" 입력하세요.");
					return false;
				}
				value += (i==1?"@":"") + input[input.length-1].value;
			}
		} else {
			input[0] = form[options.name];
			if (Validate.isNull(input[0].value)) {
				this.msg(input[0],options.text + getAux(options.text,1) +" 입력하세요.");
				return false;
			}
			value = input[0].value;
		}

		if(!Validate.isEmail(value)) {
			this.msg(input[0],"유효하지 않은 이메일 주소입니다. 다시한번 정확히 입력하세요.");
			return false;
		}

		return true;
	},

	// 주민번호 유효성 검사 (주민등록번호이거나 외국인 번호면 TRUE 아니면 FALSE
	SSN : function(form,options) {
		var input = new Array();
		var value = "";

		if(Object.isArray(options.name)) {
			for (i = 0; i < 2; i++) {
				input[input.length] = form[options.name[i]];
				if (Validate.isNull(input[input.length-1].value)) {
					this.msg(input[input.length-1],options.text + getAux(options.text,1) +" 입력하세요.");
					return false;
				}
				value += input[input.length-1].value;
			}
		} else {
			input[0] = form[options.name];
			if (Validate.isNull(input[0].value)) {
				this.msg(input[0],options.text + getAux(options.text,1) +" 입력하세요.");
				return false;
			}
			value = input[0].value;
		}
		//유효성 임시 제거
		/*if(!Validate.isSSN(value) && !Validate.isFGN(value)) {
			this.msg(input[0],"유효하지 않은 주민등록번호입니다. 다시한번 정확히 입력하세요.1234");
			return false;
		}
*/
		return true;
	},
	
	// FCKEditor 타입의 공백체크
	FCK : function(form, options) {
		var oEditor = FCKeditorAPI.GetInstance(options.name);
		if(oEditor.GetXHTML() == "") {
			this.msg(oEditor,options.text + getAux(options.text,1) +" 입력하세요.");
			oEditor.Focus();
			return false;
		}
		return true;
	},
	
	// NAMO Editor 타입의 공백체크 (구현안됨)
	NAMO : function(form, options) {
		return true;
	},
	
	// 특수문자 유효성 검사
	SPECIALCHAR : function(form,options) {
		var input = form[options.name];
		if(!Validate.checkSpecialChar(input.value)) {
			this.msg(input,options.text +"에 허용되지않는 특수문자가 포함되어있습니다.");
			return false;
		}
		return true;
	},
	
	// 특수문자 유효성 검사
	SPECIALCHAR2 : function(form,options) {
		var input = form[options.name];
		if(!Validate.checkSpecialChar2(input.value)) {
			this.msg(input,options.text +"에 허용되지않는 특수문자가 포함되어있습니다.");
			return false;
		}
		return true;
	},
	
	// 숫자입력 검사
	NUM : function(form,options) {
		var input = form[options.name];
		if(!Validate.isNum(input.value)) {
			this.msg(input,options.text + getAux(options.text,2) +" 숫자로만 입력해 주세요.");
			return false;
		}
		return true;
	},
	
	// 문지열 길이 검사
	LENGTH : function(form,options) {
		var input = form[options.name];
		if(!Validate.checkLength(input.value, options.param[0], options.param[1])) {
			this.msg(input,options.text + getAux(options.text,2) +" "
				+((options.param[0] == options.param[1]) ? 
					options.param[0]+"자로 ": options.param[0]+"자 에서 "+options.param[1]+"자 사이로 ")
					+"입력하세요.");
			return false;
		}
		return true;
	},
	
	// 문지열 길이 검사
	RANGE : function(form,options) {
		var input = form[options.name];
		if(!Validate.checkRange(input.value, options.param[0], options.param[1])) {
			this.msg(input,options.text + getAux(options.text,2) +" "
				+ options.param[0]+" 에서 "+options.param[1]+" 사이로 "
					+"입력하세요.");
			return false;
		}
		return true;
	},
	
	// Validate 내에서 alert을 띄우는 함수
	msg : function(input,text) {
		alert(text);
		if(input.focus && input.type != "hidden" 
			&& !input.disabled && input.style.display != "none") input.focus();
	}
}

/////////////////////////////////////////////////////////////////////////////////////////////////
//   Validate.Inpector를 사용하여 해당 폼에 대한 유효성 검사를 실행하는 클래스 
/////////////////////////////////////////////////////////////////////////////////////////////////
Validate.Form = Class.create(Validate.Inpector,{
	
	// 클래스 생성자 함수
	initialize: function(elementName){
		this.entry = $A();
		this.result = true;
		this.elementName = elementName;
	},
	
	// 검사할 Input을 등록한다.
	set : function(elementName, text, option, param) {
		var options = {name:elementName, text:text, option:option, param:param};
		this.entry[this.entry.length] = options;
	},
	
	// 검사할 Input을 해제한다.
	unset : function(elementName) {
		this.entry.each(function(pair,i) {
			if(pair.name == elementName) {
				delete this.entry(i);
				this.entry.compect();
			}
		}.bind(this));
	},
	
	// 해당폼내에 등록된 Input의 값을 검사한다.
	checkValue : function() {
		try {
			this.form = ($(this.elementName)||document[this.elementName]);
			this.entry.each(function(options) {
				if(typeof options.option == "string") {
					var inspector = this[options.option].bind(this);
					this.result = inspector(this.form,options);
				} else if(typeof options.option == "function") {
					var func = options.option.bind(this.form);
					this.result = func() === undefined? true : false;
				} else if(!options.option) {
					this.result = this.ISNULL(this.form,options);
				}
				if(!this.result) throw $break;
			}.bind(this));
			return this.result; 
		} catch(e) {
			alert(e.description);
			return false;
		}
	}
});


// 해당 단어에 대한 조사를 구해온다 
// type = 1 : (을/를), 2: (은/는), 3: (이/가)
var getAux = function(val, type){
	hanTable=new Array();
	hanTable[0]='ㄱㄲㄴㄷㄸㄹㅁㅂㅃㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎ'; // 19 초성
	hanTable[1]='ㅏㅐㅑㅒㅓㅔㅕㅖㅗㅘㅙㅚㅛㅜㅝㅞㅟㅠㅡㅢㅣ'; //21 중성
	hanTable[2]=' ㄱㄲㄳㄴㄵㄶㄷㄹㄺㄻㄼㄽㄾㄿㅀㅁㅂㅄㅅㅆㅇㅈㅊㅋㅌㅍㅎ'; //28 종성

	b = val.charCodeAt(val.length-1);
	hcode = b-0xAC00;
	cho = new Array();
	cho[0] = parseInt(hcode / 588); //초성
	hcode2 = hcode % 588;
	cho[1] = parseInt(hcode2 / 28); //중성
	cho[2] = hcode2 % 28; //종성 ㄱ,,,ㄴ 

	mun=new Array();
	mun[0]  =hanTable[0].charAt(cho[0]);
	mun[1] = hanTable[1].charAt(cho[1]); //자음
	mun[2] = hanTable[2].charAt(cho[2]); //0번은 종성유무
	
	var aux = "을를은는이가"
	return (mun[2].trim() != "") ? aux.charAt((type*2)-2) : aux.charAt((type*2)-1);
}


반응형

'차근차근 > JAVA Script' 카테고리의 다른 글

js로그 콘솔에 찍는 방법  (0) 2015.06.08
자바스크립트 셀렉트박스 선택하기  (0) 2015.06.08
format number  (0) 2015.06.05
jquery dialog 사용법  (0) 2015.01.28
[자바스크립트] confirm() 주의할 것  (0) 2015.01.28