[펌]유연한 자동 폼 검사기 > 그누4 팁자료실

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!

그누4 팁자료실

그누보드4와 관련된 팁을 여러분들과 함께 공유하세요.
나누면 즐거움이 커집니다.

[펌]유연한 자동 폼 검사기 정보

[펌]유연한 자동 폼 검사기

본문

<펌>

좋다...

 

 

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

댓글 6개

if('좋은 소스를 올려주셔서...') {
      alert(' 정말 감사합니다......^^~~~');
      a.focus();
      return;
  }

본문 상단부분의 버전으로....^^
전체 6 |RSS
그누4 팁자료실 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT