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 |