javascript String prototype

Javascript 2007. 12. 10. 12:26
1 /*--------------------------------------------------------------------------------*
    2  *  JavaScript framework, version 2.0
    3  *
    4  *  Date : 2006. 08. 15.
    5  *  Copyright 1998-2007 by Vricks Studio All right reserved.
    6  *  @author Jeff Yang routine@vricks.com
    7  *  자주 쓰이는 스트링 관련 prototype관련 정리
    8 *--------------------------------------------------------------------------------*/
    9 
   10 /*--------------------------------------------------------------------------------*
   11  *  String prototype
   12 *--------------------------------------------------------------------------------*/
   13     //-----------------------------------------------------------------------------
   14     // 문자의 좌, 우 공백 제거
   15     // @return : String
   16     //-----------------------------------------------------------------------------
   17     String.prototype.trim = function() {
   18         return this.replace(/(^s*)|(s*$)/g, "");
   19     }
   20     //-----------------------------------------------------------------------------
   21     // 문자의 좌 공백 제거
   22     // @return : String
   23     //-----------------------------------------------------------------------------
   24     String.prototype.ltrim = function() {
   25         return this.replace(/(^s*)/, "");
   26     }
   27     //-----------------------------------------------------------------------------
   28     // 문자의 우 공백 제거
   29     // @return : String
   30     //-----------------------------------------------------------------------------
   31     String.prototype.rtrim = function() {
   32         return this.replace(/(s*$)/, "");   
   33     }
   34     //-----------------------------------------------------------------------------
   35     // 문자열의 byte 길이 반환
   36     // @return : int
   37     //-----------------------------------------------------------------------------
   38     String.prototype.byte = function() {
   39         var cnt = 0;
   40         for (var i = 0; i < this.length; i++) {
   41             if (this.charCodeAt(i) > 127)
   42                 cnt += 2;
   43             else
   44                 cnt++;
   45         }
   46         return cnt;
   47     }
   48     //-----------------------------------------------------------------------------
   49     // 정수형으로 변환
   50     // @return : String
   51     //-----------------------------------------------------------------------------
   52     String.prototype.int = function() {
   53         if(!isNaN(this)) {
   54             return parseInt(this);
   55         }
   56         else {
   57             return null;   
   58         }
   59     }
   60     //-----------------------------------------------------------------------------
   61     // 숫자만 가져 오기
   62     // @return : String
   63     //-----------------------------------------------------------------------------
   64     String.prototype.num = function() {
   65         return (this.trim().replace(/[^0-9]/g, ""));
   66     }
   67     //-----------------------------------------------------------------------------
   68     // 숫자에 3자리마다 , 를 찍어서 반환
   69     // @return : String
   70     //-----------------------------------------------------------------------------
   71     String.prototype.money = function() {
   72         var num = this.trim();
   73         while((/(-?[0-9]+)([0-9]{3})/).test(num)) {
   74             num = num.replace((/(-?[0-9]+)([0-9]{3})/), "$1,$2");
   75         }
   76         return num;
   77     }
   78     //-----------------------------------------------------------------------------
   79     // 숫자의 자리수(cnt)에 맞도록 반환
   80     // @return : String
   81     //-----------------------------------------------------------------------------
   82     String.prototype.digits = function(cnt) {
   83         var digit = "";
   84         if (this.length < cnt) {
   85             for(var i = 0; i < cnt - this.length; i++) {
   86                 digit += "0";
   87             }
   88         }
   89         return digit + this;
   90     }
   91     //-----------------------------------------------------------------------------
   92     // " -> &#34; ' -> &#39;로 바꾸어서 반환
   93     // @return : String
   94     //-----------------------------------------------------------------------------
   95     String.prototype.quota = function() {
   96         return this.replace(/"/g, "&#34;").replace(/'/g, "&#39;");
   97     }
   98     //-----------------------------------------------------------------------------
   99     // 파일 확장자만 가져오기
  100     // @return : String
  101     //-----------------------------------------------------------------------------
  102     String.prototype.ext = function() {
  103         return (this.indexOf(".") < 0) ? "" : this.substring(this.lastIndexOf(".") + 1, this.length);   
  104     }
  105     //-----------------------------------------------------------------------------
  106     // URL에서 파라메터 제거한 순수한 url 얻기
  107     // @return : String
  108     //-----------------------------------------------------------------------------   
  109     String.prototype.uri = function() {
  110         var arr = this.split("?");
  111         arr = arr[0].split("#");
  112         return arr[0];   
  113     }
  114 
  115 /*---------------------------------------------------------------------------------*
  116  *  각종 체크 함수들
  117 *---------------------------------------------------------------------------------*/
  118     //-----------------------------------------------------------------------------
  119     // 정규식에 쓰이는 특수문자를 찾아서 이스케이프 한다.
  120     // @return : String
  121     //-----------------------------------------------------------------------------
  122     String.prototype.meta = function() {
  123         var str = this;
  124         var result = ""
  125         for(var i = 0; i < str.length; i++) {
  126             if((/([$()*+.[]?\^{}|]{1})/).test(str.charAt(i))) {
  127                 result += str.charAt(i).replace((/([$()*+.[]?\^{}|]{1})/), "\$1");
  128             }
  129             else {
  130                 result += str.charAt(i);
  131             }
  132         }
  133         return result;
  134     }
  135     //-----------------------------------------------------------------------------
  136     // 정규식에 쓰이는 특수문자를 찾아서 이스케이프 한다.
  137     // @return : String
  138     //-----------------------------------------------------------------------------
  139     String.prototype.remove = function(pattern) {
  140         return (pattern == null) ? this : eval("this.replace(/[" + pattern.meta() + "]/g, "")");
  141     }
  142     //-----------------------------------------------------------------------------
  143     // 최소 최대 길이인지 검증
  144     // str.isLength(min [,max])
  145     // @return : boolean
  146     //-----------------------------------------------------------------------------
  147     String.prototype.isLength = function() {
  148         var min = arguments[0];
  149         var max = arguments[1] ? arguments[1] : null;
  150         var success = true;
  151         if(this.length < min) {
  152             success = false;
  153         }
  154         if(max && this.length > max) {
  155             success = false;
  156         }
  157         return success;
  158     }
  159     //-----------------------------------------------------------------------------
  160     // 최소 최대 바이트인지 검증
  161     // str.isByteLength(min [,max])
  162     // @return : boolean
  163     //-----------------------------------------------------------------------------
  164     String.prototype.isByteLength = function() {
  165         var min = arguments[0];
  166         var max = arguments[1] ? arguments[1] : null;
  167         var success = true;
  168         if(this.byte() < min) {
  169             success = false;
  170         }
  171         if(max && this.byte() > max) {
  172             success = false;
  173         }
  174         return success;
  175     }
  176     //-----------------------------------------------------------------------------
  177     // 공백이나 널인지 확인
  178     // @return : boolean
  179     //-----------------------------------------------------------------------------
  180     String.prototype.isBlank = function() {
  181         var str = this.trim();
  182         for(var i = 0; i < str.length; i++) {
  183             if ((str.charAt(i) != "t") && (str.charAt(i) != "n") && (str.charAt(i)!="r")) {
  184                 return false;
  185             }
  186         }
  187         return true;
  188     }
  189     //-----------------------------------------------------------------------------
  190     // 숫자로 구성되어 있는지 학인
  191     // arguments[0] : 허용할 문자셋
  192     // @return : boolean
  193     //-----------------------------------------------------------------------------
  194     String.prototype.isNum = function() {
  195         return (/^[0-9]+$/).test(this.remove(arguments[0])) ? true : false;
  196     }
  197     //-----------------------------------------------------------------------------
  198     // 영어만 허용 - arguments[0] : 추가 허용할 문자들
  199     // @return : boolean
  200     //-----------------------------------------------------------------------------
  201     String.prototype.isEng = function() {
  202         return (/^[a-zA-Z]+$/).test(this.remove(arguments[0])) ? true : false;
  203     }
  204     //-----------------------------------------------------------------------------
  205     // 숫자와 영어만 허용 - arguments[0] : 추가 허용할 문자들
  206     // @return : boolean
  207     //-----------------------------------------------------------------------------
  208     String.prototype.isEngNum = function() {
  209         return (/^[0-9a-zA-Z]+$/).test(this.remove(arguments[0])) ? true : false;
  210     }
  211     //-----------------------------------------------------------------------------
  212     // 숫자와 영어만 허용 - arguments[0] : 추가 허용할 문자들
  213     // @return : boolean
  214     //-----------------------------------------------------------------------------
  215     String.prototype.isNumEng = function() {
  216         return this.isEngNum(arguments[0]);
  217     }
  218     //-----------------------------------------------------------------------------
  219     // 아이디 체크 영어와 숫자만 체크 첫글자는 영어로 시작 - arguments[0] : 추가 허용할 문자들
  220     // @return : boolean
  221     //-----------------------------------------------------------------------------
  222     String.prototype.isUserid = function() {
  223         return (/^[a-zA-z]{1}[0-9a-zA-Z]+$/).test(this.remove(arguments[0])) ? true : false;
  224     }
  225     //-----------------------------------------------------------------------------
  226     // 한글 체크 - arguments[0] : 추가 허용할 문자들
  227     // @return : boolean
  228     //-----------------------------------------------------------------------------
  229     String.prototype.isKor = function() {
  230         return (/^[가-힣]+$/).test(this.remove(arguments[0])) ? true : false;
  231     }
  232     //-----------------------------------------------------------------------------
  233     // 주민번호 체크 - arguments[0] : 주민번호 구분자
  234     // XXXXXX-XXXXXXX
  235     // @return : boolean
  236     //-----------------------------------------------------------------------------
  237     String.prototype.isJumin = function() {
  238         var arg = arguments[0] ? arguments[0] : "";
  239         var jumin = eval("this.match(/[0-9]{2}[01]{1}[0-9]{1}[0123]{1}[0-9]{1}" + arg + "[1234]{1}[0-9]{6}$/)");
  240         if(jumin == null) {
  241             return false;
  242         }
  243         else {
  244             jumin = jumin.toString().num().toString();
  245         }
  246         // 생년월일 체크
  247         var birthYY = (parseInt(jumin.charAt(6)) == (1 ||2)) ? "19" : "20";
  248         birthYY += jumin.substr(0, 2);
  249         var birthMM = jumin.substr(2, 2) - 1;
  250         var birthDD = jumin.substr(4, 2);
  251         var birthDay = new Date(birthYY, birthMM, birthDD);
  252         if(birthDay.getYear() % 100 != jumin.substr(0,2) || birthDay.getMonth() != birthMM || birthDay.getDate() != birthDD) {
  253             return false;
  254         }       
  255         var sum = 0;
  256         var num = [2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5]
  257         var last = parseInt(jumin.charAt(12));
  258         for(var i = 0; i < 12; i++) {
  259             sum += parseInt(jumin.charAt(i)) * num[i];
  260         }
  261         return ((11 - sum % 11) % 10 == last) ? true : false;
  262     }
  263     //-----------------------------------------------------------------------------
  264     // 외국인 등록번호 체크 - arguments[0] : 등록번호 구분자
  265     // XXXXXX-XXXXXXX
  266     // @return : boolean
  267     //-----------------------------------------------------------------------------
  268     String.prototype.isForeign = function() {
  269         var arg = arguments[0] ? arguments[0] : "";
  270         var jumin = eval("this.match(/[0-9]{2}[01]{1}[0-9]{1}[0123]{1}[0-9]{1}" + arg + "[5678]{1}[0-9]{1}[02468]{1}[0-9]{2}[6789]{1}[0-9]{1}$/)");
  271         if(jumin == null) {
  272             return false;
  273         }
  274         else {
  275             jumin = jumin.toString().num().toString();
  276         }
  277         // 생년월일 체크
  278         var birthYY = (parseInt(jumin.charAt(6)) == (5 || 6)) ? "19" : "20";
  279         birthYY += jumin.substr(0, 2);
  280         var birthMM = jumin.substr(2, 2) - 1;
  281         var birthDD = jumin.substr(4, 2);
  282         var birthDay = new Date(birthYY, birthMM, birthDD);
  283         if(birthDay.getYear() % 100 != jumin.substr(0,2) || birthDay.getMonth() != birthMM || birthDay.getDate() != birthDD) {
  284             return false;
  285         }
  286         if((parseInt(jumin.charAt(7)) * 10 + parseInt(jumin.charAt(8))) % 2 != 0) {
  287             return false;
  288         }
  289         var sum = 0;
  290         var num = [2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5]
  291         var last = parseInt(jumin.charAt(12));
  292         for(var i = 0; i < 12; i++) {
  293             sum += parseInt(jumin.charAt(i)) * num[i];
  294         }
  295         return (((11 - sum % 11) % 10) + 2 == last) ? true : false;
  296     }   
  297     //-----------------------------------------------------------------------------
  298     // 사업자번호 체크 - arguments[0] : 등록번호 구분자
  299     // XX-XXX-XXXXX
  300     // @return : boolean
  301     //-----------------------------------------------------------------------------
  302     String.prototype.isBiznum = function() {
  303         var arg = arguments[0] ? arguments[0] : "";
  304         var biznum = eval("this.match(/[0-9]{3}" + arg + "[0-9]{2}" + arg + "[0-9]{5}$/)");
  305         if(biznum == null) {
  306             return false;
  307         }
  308         else {
  309             biznum = biznum.toString().num().toString();
  310         }
  311         var sum = parseInt(biznum.charAt(0));
  312         var num = [0, 3, 7, 1, 3, 7, 1, 3];
  313         for(var i = 1; i < 8; i++) sum += (parseInt(biznum.charAt(i)) * num[i]) % 10;
  314         sum += Math.floor(parseInt(parseInt(biznum.charAt(8))) * 5 / 10);
  315         sum += (parseInt(biznum.charAt(8)) * 5) % 10 + parseInt(biznum.charAt(9));
  316         return (sum % 10 == 0) ? true : false;
  317     }
  318     //-----------------------------------------------------------------------------
  319     // 법인 등록번호 체크 - arguments[0] : 등록번호 구분자
  320     // XXXXXX-XXXXXXX
  321     // @return : boolean
  322     //-----------------------------------------------------------------------------
  323     String.prototype.isCorpnum = function() {
  324         var arg = arguments[0] ? arguments[0] : "";
  325         var corpnum = eval("this.match(/[0-9]{6}" + arg + "[0-9]{7}$/)");
  326         if(corpnum == null) {
  327             return false;
  328         }
  329         else {
  330             corpnum = corpnum.toString().num().toString();
  331         }
  332         var sum = 0;
  333         var num = [1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2]
  334         var last = parseInt(corpnum.charAt(12));
  335         for(var i = 0; i < 12; i++) {
  336             sum += parseInt(corpnum.charAt(i)) * num[i];
  337         }
  338         return ((10 - sum % 10) % 10 == last) ? true : false;
  339     }
  340     //-----------------------------------------------------------------------------
  341     // 이메일의 유효성을 체크
  342     // @return : boolean
  343     //-----------------------------------------------------------------------------
  344     String.prototype.isEmail = function() {
  345         return (/w+([-+.]w+)*@w+([-.]w+)*.[a-zA-Z]{2,4}$/).test(this.trim());
  346     }
  347     //-----------------------------------------------------------------------------
  348     // 전화번호 체크 - arguments[0] : 전화번호 구분자
  349     // @return : boolean
  350     //-----------------------------------------------------------------------------
  351     String.prototype.isPhone = function() {
  352         var arg = arguments[0] ? arguments[0] : "";
  353         return eval("(/(02|0[3-9]{1}[0-9]{1})" + arg + "[1-9]{1}[0-9]{2,3}" + arg + "[0-9]{4}$/).test(this)");
  354     }
  355     //-----------------------------------------------------------------------------
  356     // 핸드폰번호 체크 - arguments[0] : 핸드폰 구분자
  357     // @return : boolean
  358     //-----------------------------------------------------------------------------
  359     String.prototype.isMobile = function() {
  360         var arg = arguments[0] ? arguments[0] : "";
  361         return eval("(/01[016789]" + arg + "[1-9]{1}[0-9]{2,3}" + arg + "[0-9]{4}$/).test(this)");
  362     }

설정

트랙백

댓글