/*--------------------------------------------------------------------------------*\ * String prototype *--------------------------------------------------------------------------------*/ /** * 문자열의 좌, 우 공백을 제거한다. * @return String */ String.prototype.trim = function() { return this.replace(/(^\s*)|(\s*$)/g, ""); }; /** * 문자열의 좌측 공백을 제거한다. * @return String */ String.prototype.ltrim = function() { return this.replace(/(^\s*)/, ""); }; /** * 문자열의 우측 공백을 제거한다. * @return String */ String.prototype.rtrim = function() { return this.replace(/(\s*$)/, ""); }; /** * 문자열의 Bytes 수를 반환한다. * @return int */ String.prototype.lengthOfByte = function() { var cnt = 0; for (var i = 0; i < this.length; i++) { if (this.charCodeAt(i) > 127) cnt += 2; else cnt++; } return cnt; }; /** * 숫자로 된 문자열을 정수형으로 변환한다. * @return int */ String.prototype.parseInt = function() { if (!isNaN(this)) return parseInt(this); else return null; }; /** * 문자열에서 숫자만 추출한다. * @return String */ String.prototype.number = function() { return (this.trim().replace(/[^0-9]/g, "")); }; /** * 숫자로 된 문자열을 금액 형식의 문자열로 반환한다. (우측에서부터 3자리마다 ,를 삽입) * @return String */ String.prototype.amount = function() { var num = this.trim(); while ((/(-?[0-9]+)([0-9]{3})/).test(num)) num = num.replace((/(-?[0-9]+)([0-9]{3})/), "$1,$2"); return num; }; /** * 숫자로 된 문자열을 자리 수에 맞도록 반환한다.
* 3자리로 정한 경우 : 9 -> 009, 99 -> 099, 999 -> 999, 9999 -> 9999 * @param count 설정할 자리 수 필수항목 * @return String */ String.prototype.digits = function(count) { var digit = ""; if (this.length < count) { for (var i = 0; i < count - this.length; i++) digit += "0"; } return digit + this; }; /** * 문자열에서 ", ' 문자를 각각 ", '로 변환한다. * @return String */ String.prototype.quota = function() { return this.replace(/"/g, """).replace(/'/g, "'"); }; /** * 파일 경로및 파일명을 가지는 문자열에서 파일의 확장자를 반환한다. * @return String */ String.prototype.fileExtension = function() { return (this.indexOf(".") < 0) ? "" : this.substring(this.lastIndexOf(".") + 1, this.length); }; /** * URL을 가지는 문자열에서 Parameter를 제거한 URL을 반환한다. * @return String */ String.prototype.uri = function() { var arr = this.split("?"); arr = arr[0].split("#"); return arr[0]; }; /*---------------------------------------------------------------------------------*\ * 각종 체크 함수들 *---------------------------------------------------------------------------------*/ /** * 정규식에 쓰이는 특수문자를 이스케이프 한다. * 특수 문자 : $, (, ), *, +, ., [, ], ?, \, ^, {, }, | * @return String */ String.prototype.meta = function() { var str = this; var result = ""; for (var i = 0; i < str.length; i++) { if ((/([\$\(\)\*\+\.\[\]\?\\\^\{\}\|]{1})/).test(str.charAt(i))) result += str.charAt(i).replace((/([\$\(\)\*\+\.\[\]\?\\\^\{\}\|]{1})/), "\\$1"); else result += str.charAt(i); } return result; }; /** * 문자열에서 문자셋에 있는 문자들을 제거한다. * @param pattern 제거할 문자셋 필수항목 * @return String */ String.prototype.remove = function(pattern) { return (pattern == null) ? this : this.replace(new RegExp('[' + pattern.meta() + ']', 'g'), ""); // eval("this.replace(/[" + pattern.meta() + "]/g, \"\")"); }; /** * 문자열의 최대 및 최소 길이의 유효성을 검사한다. * @param maximum 문자열의 최대 길이 필수항목 * @param minimum 문자열의 최소 길이 * @return boolean */ String.prototype.isLength = function() { var max = arguments[0]; var min = arguments[1] ? arguments[1] : null; if (this.length > max) return false; if (min && this.length < min) return false; return true; }; /** * 문자열의 최대 및 최소 Byte 수의 유효성을 검사한다. * @param maximum 문자열의 최대 Byte 수 필수항목 * @param minimum 문자열의 최소 Byte 수 * @return boolean */ String.prototype.isByteLength = function() { var max = arguments[0]; var min = arguments[1] ? arguments[1] : null; if (this.lengthOfByte() > max) return false; if (min && this.lengthOfByte() < min) return false; return true; }; /** * 문자열이 빈 문자열 또는 공백인지 검사한다. (\r, \n, \t도 공백에 포함) * @return boolean */ String.prototype.isBlank = function() { var str = this.trim(); for (var i = 0; i < str.length; i++) { if ((str.charAt(i) != "\t") && (str.charAt(i) != "\n") && (str.charAt(i)!="\r")) return false; } return true; }; /** * 문자열이 숫자로 구성되어 있는지 검사한다. * @param withChars 숫자 이외의 포함할 문자셋 * @return boolean */ String.prototype.isNumber = function() { return (/^[0-9]+$/).test(this.remove(arguments[0])); }; /** * 문자열이 영문으로 구성되어 있는지 검사한다. * @param withChars 영문 이외의 허용할 문자셋 * @return boolean */ String.prototype.isEng = function() { return (/^[a-zA-Z]+$/).test(this.remove(arguments[0])); }; /** * 문자열이 영문, 숫자로 구성되어 있는지 검사한다. * @param withChars 영문, 숫자 이외의 허용할 문자셋 * @return boolean */ String.prototype.isEngNum = function() { return (/^[0-9a-zA-Z]+$/).test(this.remove(arguments[0])); }; /** * 문자열이 첫문자가 영문으로 시작되는 영문, 숫자로 구성되어 있는지 검사한다. * @param withChars 영문, 숫자 이외의 허용할 문자셋 * @return boolean */ String.prototype.isUserid = function() { return (/^[a-zA-z]{1}[0-9a-zA-Z]+$/).test(this.remove(arguments[0])); }; /** * 문자열이 한글로만 구성되어 있는지 검사한다. * @param withChars 한글 이외의 허용할 문자셋 * @return boolean */ String.prototype.isKor = function() { return (/^[가-힣]+$/).test(this.remove(arguments[0])); }; /** * 문자열의 주민번호 유효성을 검사한다. * @param dilimiter 구분자 * @return boolean */ String.prototype.isSSN = function() { var arg = arguments[0] ? arguments[0] : ""; var jumin = new RegExp('[0-9]{2}[01]{1}[0-9]{1}[0123]{1}[0-9]{1}' + arg + '[1234]{1}[0-9]{6}$').test(this); // eval("this.match(/[0-9]{2}[01]{1}[0-9]{1}[0123]{1}[0-9]{1}" + arg + "[1234]{1}[0-9]{6}$/)"); if (!jumin) return false; var juminNumStr= this.number().toString(); // 생년월일 체크 var birthYY = (parseInt(juminNumStr.charAt(6)) == (1 ||2)) ? "19" : "20"; birthYY += juminNumStr.substr(0, 2); var birthMM = juminNumStr.substr(2, 2) - 1; var birthDD = juminNumStr.substr(4, 2); var birthDay = new Date(birthYY, birthMM, birthDD); if (birthDay.getFullYear() % 100 != juminNumStr.substr(0, 2) || birthDay.getMonth() != birthMM || birthDay.getDate() != birthDD) return false; var sum = 0; var num = [2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5]; var last = parseInt(juminNumStr.charAt(12)); for (var i = 0; i < 12; i++) sum += parseInt(juminNumStr.charAt(i)) * num[i]; return ((11 - sum % 11) % 10 == last); }; /** * 문자열의 외국인등록번호 유효성을 검사한다. * @param dilimiter 구분자 * @return boolean */ String.prototype.isFrgnNum = function() { var arg = arguments[0] ? arguments[0] : ""; var foreign = new RegExp('[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}$').test(this); // 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}$/)"); if (!foreign) return false; var foreignNumStr = this.number().toString(); // 생년월일 체크 var birthYY = (parseInt(foreignNumStr.charAt(6)) == (5 || 6)) ? "19" : "20"; birthYY += foreignNumStr.substr(0, 2); var birthMM = foreignNumStr.substr(2, 2) - 1; var birthDD = foreignNumStr.substr(4, 2); var birthDay = new Date(birthYY, birthMM, birthDD); if (birthDay.getFullYear() % 100 != foreignNumStr.substr(0, 2) || birthDay.getMonth() != birthMM || birthDay.getDate() != birthDD) return false; if ((parseInt(foreignNumStr.charAt(7)) * 10 + parseInt(foreignNumStr.charAt(8))) % 2 != 0) return false; var sum = 0; var num = [2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5]; var last = parseInt(foreignNumStr.charAt(12)); for (var i = 0; i < 12; i++) sum += parseInt(foreignNumStr.charAt(i)) * num[i]; return (((11 - sum % 11) % 10) + 2 == last); }; /** * 문자열의 사업자등록번호 유효성을 검사한다. * @param dilimiter 구분자 * @return boolean */ String.prototype.isRegNum = function() { var arg = arguments[0] ? arguments[0] : ""; var biznum = new RegExp('[0-9]{3}' + arg + '[0-9]{2}' + arg + '[0-9]{5}$').test(this); // eval("this.match(/[0-9]{3}" + arg + "[0-9]{2}" + arg + "[0-9]{5}$/)"); if (!biznum) return false; var biznumStr = this.number().toString(); var sum = parseInt(biznumStr.charAt(0)); var num = [0, 3, 7, 1, 3, 7, 1, 3]; for (var i = 1; i < 8; i++) sum += (parseInt(biznumStr.charAt(i)) * num[i]) % 10; sum += Math.floor(parseInt(parseInt(biznumStr.charAt(8))) * 5 / 10); sum += (parseInt(biznumStr.charAt(8)) * 5) % 10 + parseInt(biznumStr.charAt(9)); return (sum % 10 == 0); }; /** * 문자열의 법인등록번호 유효성을 검사한다. * @param dilimiter 구분자 * @return boolean */ String.prototype.isCorpNum = function() { var arg = arguments[0] ? arguments[0] : ""; var corpnum = new RegExp('[0-9]{6}' + arg + '[0-9]{7}$').test(this); //eval("this.match(/[0-9]{6}" + arg + "[0-9]{7}$/)"); if (!corpnum) return false; var corpnumStr = this.number().toString(); var sum = 0; var num = [1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2]; var last = parseInt(corpnumStr.charAt(12)); for (var i = 0; i < 12; i++) sum += parseInt(corpnumStr.charAt(i)) * num[i]; return ((10 - sum % 10) % 10 == last); }; /** * 문자열의 이메일 유효성을 검사한다. * @return boolean */ String.prototype.isEmail = function() { return (/\w+([-+.]\w+)*@\w+([-.]\w+)*\.[a-zA-Z]{2,4}$/).test(this.trim()); }; /** * 문자열의 전화번호 유효성을 검사한다. * @param dilimiter 구분자 * @return boolean */ String.prototype.isTelNum = function() { var arg = arguments[0] ? arguments[0] : ""; return new RegExp('(02|0[3-9]{1}[0-9]{1})' + arg + "[1-9]{1}[0-9]{2,3}" + arg + '[0-9]{4}$').test(this); //eval("(/(02|0[3-9]{1}[0-9]{1})" + arg + "[1-9]{1}[0-9]{2,3}" + arg + "[0-9]{4}$/).test(this)"); }; /** * 문자열의 휴대폰번호 유효성을 검사한다. * @param dilimiter 구분자 * @return boolean */ String.prototype.isHPNum = function() { var arg = arguments[0] ? arguments[0] : ""; return new RegExp('01[016789]' + arg + '[1-9]{1}[0-9]{2,3}' + arg + '[0-9]{4}$').test(this); //eval("(/01[016789]" + arg + "[1-9]{1}[0-9]{2,3}" + arg + "[0-9]{4}$/).test(this)"); };