/*--------------------------------------------------------------------------------*\
* 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)");
};