[펌]유연한 자동 폼 검사기 정보
[펌]유연한 자동 폼 검사기본문
<펌>
좋다...
function checkit() {
if('폼 값 a 가 없으면...') {
alert('입력해~~~');
a.focus();
return;
}
.
.
.
submit();
}
만약 체크해야할 폼값이 한두개가 아니고 수십개가 된다면....
생각만 해도 짜증나는 일입니다...
이런 것들을 아주 쉽게 할수 있게 해주는 스크립트 입니다...
아... 왜 진작 알지 못했을까....
// lib.formcheck.js 소스
/*********************************************
* 파일명: lib.validate.js
* 기능: 유연한 자동 폼 검사기
* 만든이: 거친마루
* 수 정: 전영규
* 날짜: 2002-10-01
* == change log ==
* 2003-10-02 여러칸으로 나눠진 항목에 대한 검사기능 추가
* 2003-10-02 패스워드등 두개 항목에 대한 비교 기능 추가
* 2003-10-03 jeon. 길이제한방법 변경, 패턴체크 변경
**********************************************/
/// 에러메시지 포멧 정의 ///
var NO_BLANK = "{name+은는} 필수항목입니다.";
var NOT_VALID = "{name+이가} 올바르지 않습니다.";
/// 스트링 객체에 메소드 추가 ///
String.prototype.trim = function(str)
{
str = this != window ? this : str;
return str.replace(/^\s+/g,'').replace(/\s+$/g,'');
}
String.prototype.hasFinalConsonant = function(str)
{
str = this != window ? this : str;
var strTemp = str.substr(str.length-1);
return ((strTemp.charCodeAt(0)-16)%28!=0);
}
String.prototype.bytes = function(str)
{
str = this != window ? this : str;
var len = 0; //bug. 이 한줄때문에 고생을.. 넣어주세요. -_-;;
for(j=0; j {
var chr = str.charAt(j);
len += (chr.charCodeAt() > 128) ? 2 : 1
}
return len;
}
function validate(form)
{
for (i = 0; i < form.elements.length; i++ )
{
var el = form.elements[i];
if (el.tagName == "FIELDSET") continue;
el.value = el.value.trim();
var fs = el.getAttribute("FS");
var minbyte = null;
var maxbyte = null;
var option = el.getAttribute("OPTION");
var match = el.getAttribute("MATCH");
var glue = el.getAttribute("GLUE");
if(fs != null)
{
minbyte = fs.split("_")[0];
maxbyte = fs.split("_")[1];
}
if (el.getAttribute("REQUIRED") != null)
{
if (el.value == null || el.value == "") return doError(el,NO_BLANK);
if (minbyte != null)
{
if (el.value.bytes() < parseInt(minbyte)) return doError(el,"{name+은는} 최소 "+minbyte+"바이트 이상 입력해야 합니다.");
}
if (maxbyte != null && el.value != "")
{
var len = 0;
if (el.value.bytes() > parseInt(maxbyte)) return doError(el,"{name}의 길이는 최대 "+maxbyte+"바이트 입니다.");
}
}
if(el.getAttribute("CHK") != null)
{
if(el.checked == false) return doError(el,NO_BLANK);
}
if (match && (el.value != form.elements[match].value)) return doError(el,"{name+이가} 일치하지 않습니다.");
if (option != null && el.value != "")
{
if (el.getAttribute('SPAN') != null)
{
var _value = new Array();
for (span=0; span
var value = _value.join(glue == null ? '' : glue);
if (!funcs[option](el,value)) return false;
}
else
{
if (!funcs[option](el)) return false;
}
}
}
return true;
}
function josa(str,tail)
{
return (str.hasFinalConsonant()) ? tail.substring(0,1) : tail.substring(1,2);
}
function doError(el,type,action)
{
var pattern = /{([a-zA-Z0-9_]+)\+?([가-힝]{2})?}/;
var name = (hname = el.getAttribute("HNAME")) ? hname : el.getAttribute("NAME");
pattern.exec(type);
var tail = (RegExp.$2) ? josa(eval(RegExp.$1),RegExp.$2) : "";
alert(type.replace(pattern,eval(RegExp.$1) + tail));
if (action == "sel") el.select();
else if (action == "del") el.value = "";
el.focus();
return false;
}
/// 특수 패턴 검사 함수 매핑 ///
/// Id, Num, Eng, Han.
var funcs = new Array();
funcs['Id'] = onlyId; // /^[a-zA-Z]{1}[a-zA-Z0-9_]+$/_
funcs['Num'] = onlyNum; // /^[0-9]+$/
funcs['Eng'] = onlyEng; // /^[a-zA-Z]+$/
funcs['EngNum'] = onlyEngNum; // /^[a-zA-Z0-9]+$/
funcs['Han'] = onlyHan; // /^[가-힣]+$/
funcs['HanEng'] = onlyHanEng; // /^[가-힣a-zA-Z]+$/
funcs['HanEngNum'] = onlyHanEngNum; // /^[가-힣a-zA-Z0-9]+$/
funcs['HanNum'] = onlyHanNum; // /^[가-힣0-9]+$/
funcs['Han1'] = onlyHan1; // 반드시 한글 포함
funcs['email'] = isValidEmail;
funcs['phone'] = isValidPhone;
funcs['hphone'] = isValidHPhone;
funcs['jumin'] = isValidJumin;
funcs['bizno'] = isValidBizNo;
funcs['domain'] = isValidDomain;
/// 패턴 검사 함수들 ///
function onlyId(el)
{
neverID = "root bin daemon adm lp sync shutdown halt mail news uucp operator games gopher ftp nobody vcsa mailnull rpm rpc xfs rpcuser nfsnobody nscd ident radvd named pcap mysql postgres oracle dba sa administrator master webmaster operator admin sysadmin test guest anonymous sysop moderator www";
temp = neverID.match(el.value);
if(temp != null) return doError(el,"\""+el.value+"\"은(는) 사용할 수 없는 아이디입니다.","sel");
var pattern = /^[a-zA-Z]{1}[a-zA-Z0-9]+$/;
// var pattern = /^[a-zA-Z0-9]+$/;
return (pattern.test(el.value)) ? true : doError(el,"{name+은는} 첫글자를 영문으로 시작, 영문/숫자만 사용할 수 있습니다.","sel");
}
function onlyNum(el)
{
var pattern = /^[0-9]+$/;
return (pattern.test(el.value)) ? true : doError(el,"{name+은는} 반드시 숫자로만 입력해야 합니다.","sel");
}
function onlyEng(el)
{
var pattern = /^[a-zA-Z]+$/;
return (pattern.test(el.value)) ? true : doError(el,"{name+은는} 반드시 영문자로만 입력해야 합니다.","sel");
}
function onlyEngNum(el)
{
var pattern = /^[a-zA-Z0-9]+$/;
return (pattern.test(el.value)) ? true : doError(el,"{name+은는} 반드시 영문자,숫자로만 입력해야 합니다.","sel");
}
function onlyHan(el)
{
var pattern = /^[가-힣]+$/;
return (pattern.test(el.value)) ? true : doError(el,"{name+은는} 반드시 한글로 입력해야 합니다.","sel");
}
function onlyHanEng(el)
{
var pattern = /^[가-힣a-zA-Z]+$/;
return (pattern.test(el.value)) ? true : doError(el,"{name+은는} 반드시 한글,영문자로만 입력해야 합니다.","sel");
}
function onlyHanEngNum(el)
{
var pattern = /^[가-힣a-zA-Z0-9]+$/;
return (pattern.test(el.value)) ? true : doError(el,"{name+은는} 반드시 한글,영문자,숫자로만 입력해야 합니다.","sel");
}
function onlyHanNum(el)
{
var pattern = /^[가-힣0-9]+$/;
return (pattern.test(el.value)) ? true : doError(el,"{name+은는} 반드시 한글,숫자로만 입력해야 합니다.","sel");
}
function onlyHan1(el)
{
var pattern = /[가-힝]/;
return (pattern.test(el.value)) ? true : doError(el,"{name+은는} 반드시 한글을 포함해야 합니다.","sel");
}
function isValidEmail(el,value)
{
var value = value ? value : el.value;
var pattern = /^[_a-zA-Z0-9-\.]+@[\.a-zA-Z0-9-]+\.[a-zA-Z]+$/;
return (pattern.test(value)) ? true : doError(el,NOT_VALID,"sel");
}
function isValidPhone(el,value)
{
var pattern = /^([0]{1}[0-9]{1,3})-?([1-9]{1}[0-9]{2,3})-?([0-9]{4})$/;
var num = value ? value : el.value;
if (pattern.exec(num))
{
if(RegExp.$1 == "010" || RegExp.$1 == "011" || RegExp.$1 == "016" || RegExp.$1 == "017" || RegExp.$1 == "018" || RegExp.$1 == "019")
{
if (!el.getAttribute('SPAN')) el.value = RegExp.$1 + "-" + RegExp.$2 + "-" + RegExp.$3;
}
return true;
}
else return doError(el,NOT_VALID,"sel");
}
function isValidHPhone(el,value)
{
var pattern = /^([0]{1}[1]{1}[016789]{1})-?([1-9]{1}[0-9]{2,3})-?([0-9]{4})$/;
var num = value ? value : el.value;
if (pattern.exec(num))
{
if(RegExp.$1 == "010" || RegExp.$1 == "011" || RegExp.$1 == "016" || RegExp.$1 == "017" || RegExp.$1 == "018" || RegExp.$1 == "019")
{
if (!el.getAttribute('SPAN')) el.value = RegExp.$1 + "-" + RegExp.$2 + "-" + RegExp.$3;
}
return true;
}
else return doError(el,NOT_VALID,"sel");
}
function isValidJumin(el,value)
{
var pattern = /^([0-9]{6})-?([0-9]{7})$/;
var num = value ? value : el.value;
if (!pattern.test(num)) return doError(el,NOT_VALID,"sel");
num = RegExp.$1 + RegExp.$2;
var sum = 0;
var last = num.charCodeAt(12) - 0x30;
var bases = "234567892345";
for (var i=0; i<12; i++)
{
if (isNaN(num.substring(i,i+1))) return doError(el,NOT_VALID,"sel");
sum += (num.charCodeAt(i) - 0x30) * (bases.charCodeAt(i) - 0x30);
}
var mod = sum % 11;
return ((11 - mod) % 10 == last) ? true : doError(el,NOT_VALID,"sel");
}
function isValidBizNo(el, value)
{
var pattern = /([0-9]{3})-?([0-9]{2})-?([0-9]{5})/;
var num = value ? value : el.value;
if (!pattern.test(num)) return doError(el,NOT_VALID,"sel");
num = RegExp.$1 + RegExp.$2 + RegExp.$3;
var cVal = 0;
for (var i=0; i<8; i++)
{
var cKeyNum = parseInt(((_tmp = i % 3) == 0) ? 1 : ( _tmp == 1 ) ? 3 : 7);
cVal += (parseFloat(num.substring(i,i+1)) * cKeyNum) % 10;
}
var li_temp = parseFloat(num.substring(i,i+1)) * 5 + '0';
cVal += parseFloat(li_temp.substring(0,1)) + parseFloat(li_temp.substring(1,2));
return (parseInt(num.substring(9,10)) == (10-(cVal%10))%10) ? true : doError(el,NOT_VALID,"sel");
}
function isValidDomain(el)
{
var pattern = /^.+(\.[a-zA-Z]{2,3})$/;
return (pattern.test(el.value)) ? true : doError(el,NOT_VALID,"sel");
}
사용 예)
1. 스크립트 호출
2.
태그에 onsubmit 구분 추가
좋다...
function checkit() {
if('폼 값 a 가 없으면...') {
alert('입력해~~~');
a.focus();
return;
}
.
.
.
submit();
}
만약 체크해야할 폼값이 한두개가 아니고 수십개가 된다면....
생각만 해도 짜증나는 일입니다...
이런 것들을 아주 쉽게 할수 있게 해주는 스크립트 입니다...
아... 왜 진작 알지 못했을까....
// lib.formcheck.js 소스
/*********************************************
* 파일명: lib.validate.js
* 기능: 유연한 자동 폼 검사기
* 만든이: 거친마루
* 수 정: 전영규
* 날짜: 2002-10-01
* == change log ==
* 2003-10-02 여러칸으로 나눠진 항목에 대한 검사기능 추가
* 2003-10-02 패스워드등 두개 항목에 대한 비교 기능 추가
* 2003-10-03 jeon. 길이제한방법 변경, 패턴체크 변경
**********************************************/
/// 에러메시지 포멧 정의 ///
var NO_BLANK = "{name+은는} 필수항목입니다.";
var NOT_VALID = "{name+이가} 올바르지 않습니다.";
/// 스트링 객체에 메소드 추가 ///
String.prototype.trim = function(str)
{
str = this != window ? this : str;
return str.replace(/^\s+/g,'').replace(/\s+$/g,'');
}
String.prototype.hasFinalConsonant = function(str)
{
str = this != window ? this : str;
var strTemp = str.substr(str.length-1);
return ((strTemp.charCodeAt(0)-16)%28!=0);
}
String.prototype.bytes = function(str)
{
str = this != window ? this : str;
var len = 0; //bug. 이 한줄때문에 고생을.. 넣어주세요. -_-;;
for(j=0; j {
var chr = str.charAt(j);
len += (chr.charCodeAt() > 128) ? 2 : 1
}
return len;
}
function validate(form)
{
for (i = 0; i < form.elements.length; i++ )
{
var el = form.elements[i];
if (el.tagName == "FIELDSET") continue;
el.value = el.value.trim();
var fs = el.getAttribute("FS");
var minbyte = null;
var maxbyte = null;
var option = el.getAttribute("OPTION");
var match = el.getAttribute("MATCH");
var glue = el.getAttribute("GLUE");
if(fs != null)
{
minbyte = fs.split("_")[0];
maxbyte = fs.split("_")[1];
}
if (el.getAttribute("REQUIRED") != null)
{
if (el.value == null || el.value == "") return doError(el,NO_BLANK);
if (minbyte != null)
{
if (el.value.bytes() < parseInt(minbyte)) return doError(el,"{name+은는} 최소 "+minbyte+"바이트 이상 입력해야 합니다.");
}
if (maxbyte != null && el.value != "")
{
var len = 0;
if (el.value.bytes() > parseInt(maxbyte)) return doError(el,"{name}의 길이는 최대 "+maxbyte+"바이트 입니다.");
}
}
if(el.getAttribute("CHK") != null)
{
if(el.checked == false) return doError(el,NO_BLANK);
}
if (match && (el.value != form.elements[match].value)) return doError(el,"{name+이가} 일치하지 않습니다.");
if (option != null && el.value != "")
{
if (el.getAttribute('SPAN') != null)
{
var _value = new Array();
for (span=0; span
var value = _value.join(glue == null ? '' : glue);
if (!funcs[option](el,value)) return false;
}
else
{
if (!funcs[option](el)) return false;
}
}
}
return true;
}
function josa(str,tail)
{
return (str.hasFinalConsonant()) ? tail.substring(0,1) : tail.substring(1,2);
}
function doError(el,type,action)
{
var pattern = /{([a-zA-Z0-9_]+)\+?([가-힝]{2})?}/;
var name = (hname = el.getAttribute("HNAME")) ? hname : el.getAttribute("NAME");
pattern.exec(type);
var tail = (RegExp.$2) ? josa(eval(RegExp.$1),RegExp.$2) : "";
alert(type.replace(pattern,eval(RegExp.$1) + tail));
if (action == "sel") el.select();
else if (action == "del") el.value = "";
el.focus();
return false;
}
/// 특수 패턴 검사 함수 매핑 ///
/// Id, Num, Eng, Han.
var funcs = new Array();
funcs['Id'] = onlyId; // /^[a-zA-Z]{1}[a-zA-Z0-9_]+$/_
funcs['Num'] = onlyNum; // /^[0-9]+$/
funcs['Eng'] = onlyEng; // /^[a-zA-Z]+$/
funcs['EngNum'] = onlyEngNum; // /^[a-zA-Z0-9]+$/
funcs['Han'] = onlyHan; // /^[가-힣]+$/
funcs['HanEng'] = onlyHanEng; // /^[가-힣a-zA-Z]+$/
funcs['HanEngNum'] = onlyHanEngNum; // /^[가-힣a-zA-Z0-9]+$/
funcs['HanNum'] = onlyHanNum; // /^[가-힣0-9]+$/
funcs['Han1'] = onlyHan1; // 반드시 한글 포함
funcs['email'] = isValidEmail;
funcs['phone'] = isValidPhone;
funcs['hphone'] = isValidHPhone;
funcs['jumin'] = isValidJumin;
funcs['bizno'] = isValidBizNo;
funcs['domain'] = isValidDomain;
/// 패턴 검사 함수들 ///
function onlyId(el)
{
neverID = "root bin daemon adm lp sync shutdown halt mail news uucp operator games gopher ftp nobody vcsa mailnull rpm rpc xfs rpcuser nfsnobody nscd ident radvd named pcap mysql postgres oracle dba sa administrator master webmaster operator admin sysadmin test guest anonymous sysop moderator www";
temp = neverID.match(el.value);
if(temp != null) return doError(el,"\""+el.value+"\"은(는) 사용할 수 없는 아이디입니다.","sel");
var pattern = /^[a-zA-Z]{1}[a-zA-Z0-9]+$/;
// var pattern = /^[a-zA-Z0-9]+$/;
return (pattern.test(el.value)) ? true : doError(el,"{name+은는} 첫글자를 영문으로 시작, 영문/숫자만 사용할 수 있습니다.","sel");
}
function onlyNum(el)
{
var pattern = /^[0-9]+$/;
return (pattern.test(el.value)) ? true : doError(el,"{name+은는} 반드시 숫자로만 입력해야 합니다.","sel");
}
function onlyEng(el)
{
var pattern = /^[a-zA-Z]+$/;
return (pattern.test(el.value)) ? true : doError(el,"{name+은는} 반드시 영문자로만 입력해야 합니다.","sel");
}
function onlyEngNum(el)
{
var pattern = /^[a-zA-Z0-9]+$/;
return (pattern.test(el.value)) ? true : doError(el,"{name+은는} 반드시 영문자,숫자로만 입력해야 합니다.","sel");
}
function onlyHan(el)
{
var pattern = /^[가-힣]+$/;
return (pattern.test(el.value)) ? true : doError(el,"{name+은는} 반드시 한글로 입력해야 합니다.","sel");
}
function onlyHanEng(el)
{
var pattern = /^[가-힣a-zA-Z]+$/;
return (pattern.test(el.value)) ? true : doError(el,"{name+은는} 반드시 한글,영문자로만 입력해야 합니다.","sel");
}
function onlyHanEngNum(el)
{
var pattern = /^[가-힣a-zA-Z0-9]+$/;
return (pattern.test(el.value)) ? true : doError(el,"{name+은는} 반드시 한글,영문자,숫자로만 입력해야 합니다.","sel");
}
function onlyHanNum(el)
{
var pattern = /^[가-힣0-9]+$/;
return (pattern.test(el.value)) ? true : doError(el,"{name+은는} 반드시 한글,숫자로만 입력해야 합니다.","sel");
}
function onlyHan1(el)
{
var pattern = /[가-힝]/;
return (pattern.test(el.value)) ? true : doError(el,"{name+은는} 반드시 한글을 포함해야 합니다.","sel");
}
function isValidEmail(el,value)
{
var value = value ? value : el.value;
var pattern = /^[_a-zA-Z0-9-\.]+@[\.a-zA-Z0-9-]+\.[a-zA-Z]+$/;
return (pattern.test(value)) ? true : doError(el,NOT_VALID,"sel");
}
function isValidPhone(el,value)
{
var pattern = /^([0]{1}[0-9]{1,3})-?([1-9]{1}[0-9]{2,3})-?([0-9]{4})$/;
var num = value ? value : el.value;
if (pattern.exec(num))
{
if(RegExp.$1 == "010" || RegExp.$1 == "011" || RegExp.$1 == "016" || RegExp.$1 == "017" || RegExp.$1 == "018" || RegExp.$1 == "019")
{
if (!el.getAttribute('SPAN')) el.value = RegExp.$1 + "-" + RegExp.$2 + "-" + RegExp.$3;
}
return true;
}
else return doError(el,NOT_VALID,"sel");
}
function isValidHPhone(el,value)
{
var pattern = /^([0]{1}[1]{1}[016789]{1})-?([1-9]{1}[0-9]{2,3})-?([0-9]{4})$/;
var num = value ? value : el.value;
if (pattern.exec(num))
{
if(RegExp.$1 == "010" || RegExp.$1 == "011" || RegExp.$1 == "016" || RegExp.$1 == "017" || RegExp.$1 == "018" || RegExp.$1 == "019")
{
if (!el.getAttribute('SPAN')) el.value = RegExp.$1 + "-" + RegExp.$2 + "-" + RegExp.$3;
}
return true;
}
else return doError(el,NOT_VALID,"sel");
}
function isValidJumin(el,value)
{
var pattern = /^([0-9]{6})-?([0-9]{7})$/;
var num = value ? value : el.value;
if (!pattern.test(num)) return doError(el,NOT_VALID,"sel");
num = RegExp.$1 + RegExp.$2;
var sum = 0;
var last = num.charCodeAt(12) - 0x30;
var bases = "234567892345";
for (var i=0; i<12; i++)
{
if (isNaN(num.substring(i,i+1))) return doError(el,NOT_VALID,"sel");
sum += (num.charCodeAt(i) - 0x30) * (bases.charCodeAt(i) - 0x30);
}
var mod = sum % 11;
return ((11 - mod) % 10 == last) ? true : doError(el,NOT_VALID,"sel");
}
function isValidBizNo(el, value)
{
var pattern = /([0-9]{3})-?([0-9]{2})-?([0-9]{5})/;
var num = value ? value : el.value;
if (!pattern.test(num)) return doError(el,NOT_VALID,"sel");
num = RegExp.$1 + RegExp.$2 + RegExp.$3;
var cVal = 0;
for (var i=0; i<8; i++)
{
var cKeyNum = parseInt(((_tmp = i % 3) == 0) ? 1 : ( _tmp == 1 ) ? 3 : 7);
cVal += (parseFloat(num.substring(i,i+1)) * cKeyNum) % 10;
}
var li_temp = parseFloat(num.substring(i,i+1)) * 5 + '0';
cVal += parseFloat(li_temp.substring(0,1)) + parseFloat(li_temp.substring(1,2));
return (parseInt(num.substring(9,10)) == (10-(cVal%10))%10) ? true : doError(el,NOT_VALID,"sel");
}
function isValidDomain(el)
{
var pattern = /^.+(\.[a-zA-Z]{2,3})$/;
return (pattern.test(el.value)) ? true : doError(el,NOT_VALID,"sel");
}
사용 예)
1. 스크립트 호출
2.
태그에 onsubmit 구분 추가
추천
0
0
댓글 6개
if('좋은 소스를 올려주셔서...') {
alert(' 정말 감사합니다......^^~~~');
a.focus();
return;
}
본문 상단부분의 버전으로....^^
alert(' 정말 감사합니다......^^~~~');
a.focus();
return;
}
본문 상단부분의 버전으로....^^
별말씀을요~~~~
필요에 의해서 수집한 것 올린것뿐인데~~~^_*
필요에 의해서 수집한 것 올린것뿐인데~~~^_*
별명에다가 어떻게 사용 해야 될지.....?
유연한 자동 폼 검사기
.
.
감사합니당...
오우~~ 감사합니다.