File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
/**
* @author 최정우
* @since 2019.12.06
*
* 공통 자바스크립트 Util입니다.
*/
const COMMON_UTIL = (function () {
var _utils = {
yesterday: function () {
let date = new Date();
let sel_day = -1; //-1이면 하루전/ +1이면 내일
date.setDate(date.getDate() + sel_day);
let yesterday = new Date(date.getTime() - (date.getTimezoneOffset() * 60000)).toISOString().substring(0, 10);
return yesterday;
},
today: function () {
let date = new Date();
let today = new Date(date.getTime() - (date.getTimezoneOffset() * 60000)).toISOString().substring(0, 10);
return today;
},
/**
* 일주일전 년-월-일 구하기
*/
oneWeekAgo: function () {
let date = new Date();
// 현재 날짜에서 7일을 빼줍니다.
let oneWeekAgoDate = new Date(date.getTime() - (6 * 24 * 60 * 60 * 1000) - (date.getTimezoneOffset() * 60000)).toISOString().substring(0, 10);
return oneWeekAgoDate;
},
/**
* 한달전 년-월-일 구하기
*/
oneMonthAgo: function (today) {
let date = new Date(today);
let oneMonthAgo = new Date(date.setMonth(date.getMonth() - 1) - (date.getTimezoneOffset() * 60000)).toISOString().substring(0, 10);
return oneMonthAgo;
},
/**
* 한달후 년-월-일 구하기
*/
oneMonthLater: function (today) {
let date = new Date(today);
let oneMonthLater = new Date(date.setMonth(date.getMonth() + 1) - (date.getTimezoneOffset() * 60000)).toISOString().substring(0, 10);
return oneMonthLater;
},
/**
* 일시에서 시,분,초 자르기
*/
yyyymmdd: function (data) {
if (data === null || data === "") {
return "-";
} else {
let date = data.substr(0, 10);
return date;
}
},
/**
* 전화번호 출력 시 '-'을 추가하여 출력
*/
HyphenMinus: function (phoneNumber) {
if (!phoneNumber) return phoneNumber;
phoneNumber = phoneNumber.replace(/[^0-9]/g, "");
let tmp = "";
if (phoneNumber.length < 4) {
return phoneNumber;
} else if (phoneNumber.length < 7) {
tmp += phoneNumber.substr(0, 3);
tmp += "-";
tmp += phoneNumber.substr(3);
return tmp;
} else if (phoneNumber.length == 8) {
tmp += phoneNumber.substr(0, 4);
tmp += "-";
tmp += phoneNumber.substr(4);
return tmp;
} else if (phoneNumber.length < 10) {
if (phoneNumber.substr(0, 2) == "02") {
//02-123-5678
tmp += phoneNumber.substr(0, 2);
tmp += "-";
tmp += phoneNumber.substr(2, 3);
tmp += "-";
tmp += phoneNumber.substr(5);
return tmp;
}
} else if (phoneNumber.length < 11) {
if (phoneNumber.substr(0, 2) == "02") {
//02-1234-5678
tmp += phoneNumber.substr(0, 2);
tmp += "-";
tmp += phoneNumber.substr(2, 4);
tmp += "-";
tmp += phoneNumber.substr(6);
return tmp;
} else {
//010-123-4567
tmp += phoneNumber.substr(0, 3);
tmp += "-";
tmp += phoneNumber.substr(3, 3);
tmp += "-";
tmp += phoneNumber.substr(6);
return tmp;
}
} else {
//010-1234-5678
tmp += phoneNumber.substr(0, 3);
tmp += "-";
tmp += phoneNumber.substr(3, 4);
tmp += "-";
tmp += phoneNumber.substr(7);
return tmp;
}
},
/**
* 전화번호 자동 '-' 삽입
*/
//전화번호 입력 시 자동 '-' 삽입
getMask: function (phoneNumber) {
if (!phoneNumber) return phoneNumber;
phoneNumber = phoneNumber.replace(/[^0-9]/g, "");
let res = "";
if (phoneNumber.length < 3) {
res = phoneNumber;
} else {
if (phoneNumber.substr(0, 2) == "02") {
if (phoneNumber.length <= 5) {
//02-123-5678
res = phoneNumber.substr(0, 2) + "-" + phoneNumber.substr(2, 3);
} else if (phoneNumber.length > 5 && phoneNumber.length <= 9) {
//02-123-5678
res =
phoneNumber.substr(0, 2) +
"-" +
phoneNumber.substr(2, 3) +
"-" +
phoneNumber.substr(5);
} else if (phoneNumber.length > 9) {
//02-1234-5678
res =
phoneNumber.substr(0, 2) +
"-" +
phoneNumber.substr(2, 4) +
"-" +
phoneNumber.substr(6);
}
} else {
if (phoneNumber.length < 8) {
res = phoneNumber;
} else if (phoneNumber.length == 8) {
res = phoneNumber.substr(0, 4) + "-" + phoneNumber.substr(4);
} else if (phoneNumber.length == 9) {
res =
phoneNumber.substr(0, 3) +
"-" +
phoneNumber.substr(3, 3) +
"-" +
phoneNumber.substr(6);
} else if (phoneNumber.length == 10) {
res =
phoneNumber.substr(0, 3) +
"-" +
phoneNumber.substr(3, 3) +
"-" +
phoneNumber.substr(6);
} else if (phoneNumber.length > 10) {
//010-1234-5678
res =
phoneNumber.substr(0, 3) +
"-" +
phoneNumber.substr(3, 4) +
"-" +
phoneNumber.substr(7);
}
}
}
return res;
},
/**
* 비밀번호 일치 체크
*/
checkPassword: function (pw, pwC) {
if (pw != pwC) return false;
return true;
},
/**
* 휴대폰 번호 정규식
*/
checkPhone: function (data) {
let regExp = /^01([0|1|6|7|8|9]?)-?([0-9]{3,4})-?([0-9]{4})$/;
if (regExp.test(data) === true) return true;
return false;
},
/**
* 사용자명 정규식
*/
checkName: function (data) {
let validateEmail = /^[가-힣a-zA-Z]{1,20}$/;
if (validateEmail.test(data) === true) return true;
return false;
},
/**
* 이메일 정규식
*/
checkEmail: function (data) {
// 이메일 형식 검사
let validateEmail =
/^[A-Za-z0-9_\\.\\-]+@[A-Za-z0-9\\-]+\.[A-Za-z0-9\\-\\.]+$/;
if (validateEmail.test(data) === true) return true;
return false;
},
/**
* 사업자번호 정규식(10자리)
*/
businessNumber: function (data) {
let validateBusinessNumber = /^\d{10}$/;
if (validateBusinessNumber.test(data) === true) return true;
return false;
},
/**
* 키워드 정규식
*/
kewordCheck: function (data) {
let validateKeword = /^#[A-Za-z0-9_]+$/;
if (validateKeword.test(data) === true) return true;
return false;
},
/**
* 아이디 정규식(5~20자의 영문 소문자, 숫자와 특수기호(_),(-)만 사용)
*/
idCheck: function (data) {
let validateId = /^[a-z0-9_-]{5,20}$/;
if (validateId.test(data) === true) return true;
return false;
},
/**
* 비밀번호 정규식(대문자, 소문자, 숫자, 특수문자를 포함한 8자 이상이어야 합니다.)
*/
pwCheck: function (data) {
let validatePw = /^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*#?&])[A-Za-z\d@$!%*#?&]{6,20}$/;
if (validatePw.test(data) === true) return true;
return false;
},
/**
* 빈 객체 여부
*/
isEmpty: function (data) {
if (
data === undefined ||
data === null ||
data === "" ||
data.length === 0 ||
(data.constructor == Object && Object.keys(data).length === 0)
) {
if (typeof data === "number") {
return true;
} else {
return false;
}
} else {
return true;
}
},
/**
* empty to null
*/
toNull: function (data) {
if (data === undefined || data === "") {
try {
data = null;
return data;
} catch (e) {
// console.log("commonUtil.js - empty to null convert error : ", e);
return data;
}
} else {
return data;
}
},
/**
* string to JSON
*/
toJson: function (data) {
if ("string" === typeof data) {
try {
return JSON.parse(data);
} catch (e) {
// console.log("commonUtil.js - string to json convert error : ", e);
return data;
}
} else {
return data;
}
},
/**
* string to JSON
*/
toJson: function (data) {
if ("string" === typeof data) {
try {
return JSON.parse(data);
} catch (e) {
// console.log("commonUtil.js - string to json convert error : ", e);
return data;
}
} else {
return data;
}
},
/**
* JSON to string
*/
toString: function (data) {
try {
return JSON.parse(data);
} catch (e) {
// console.log("commonUtil.js - json to string convert error : ", e);
return data;
}
},
/**
* 다중 separator split
*/
split: function (text, separator) {
var words = [];
if (
this.isEmpty(text) == false &&
this.isEmpty(separator) == false &&
separator.length > 0
) {
words.push(text);
for (var i = 0; i < separator.length; i++) {
var subWords = [];
for (var j = 0; j < words.length; j++) {
if (
this.isEmpty(words[j]) == false &&
this.isEmpty(separator[i]) == false
) {
subWords = subWords.concat(words[j].split(separator[i]));
} else {
if (words[j] == false) {
subWords.push(words[j]);
} else {
continue;
}
}
}
words = subWords;
}
return words;
} else {
if (this.isEmpty(text) == false) {
words.push(text);
}
return words;
}
},
/**
* 객체 깊은 복사
*/
copyObject: function (obj) {
if (obj === null || typeof obj !== "object") return obj;
try {
return JSON.parse(JSON.stringify(obj));
} catch (e) {
// console.log("commonUtil.js - copyObject error : ", e);
return null;
}
},
/**
* 날짜 + 시간 구하기
*
*
*/
getDateTime: function () {
return this.getDate() + " " + this.getFullTime();
},
/**
* 날짜 구하기
*
* param 설명
*
* options = {
* addYear(Integer),
* addMonth(Integer),
* addDay(Integer),
* separator(String)
* }
*/
getDate: function (options) {
if (this.isEmpty(options) == true) {
options = {
addYear: 0,
addMonth: 0,
addDay: 0,
separator: "-",
};
} else {
options.addYear = options.addYear || 0;
options.addMonth = options.addMonth || 0;
options.addDay = options.addDay || 0;
options.separator = options.separator || "-";
}
var date = new Date();
date.setFullYear(date.getFullYear() + options.addYear);
date.setMonth(date.getMonth() + options.addMonth);
date.setDate(date.getDate() + options.addDay);
var yyyy = date.getFullYear();
var mm = date.getMonth() + 1;
var dd = date.getDate();
return (
yyyy +
options.separator +
this.prefixZero(mm, 2) +
options.separator +
this.prefixZero(dd, 2)
);
},
/**
* 현재 년도 조회
*/
getYear: function () {
var date = new Date();
return date.getFullYear();
},
/**
* 현재 월 조회
*/
getMonth: function () {
var date = new Date();
return date.getMonth() + 1;
},
/**
* 현재 월 조회
*/
getFullMonth: function () {
var date = new Date();
return this.prefixZero(date.getMonth() + 1, 2);
},
/**
* 현재 일 조회
*/
getDay: function () {
var date = new Date();
return date.getDate();
},
/**
* 현재 일 조회
*/
getFullDay: function () {
var date = new Date();
return this.prefixZero(date.getDate(), 2);
},
/**
* 현재 시간 조회
*/
getHour: function () {
var date = new Date();
return date.getFullYear();
},
/**
* 현재 분 조회
*/
getMinute: function () {
var date = new Date();
return date.getMinutes() + 1;
},
/**
* 현재 초 조회
*/
getSeconds: function () {
var date = new Date();
return date.getSeconds();
},
/**
* 시간 구하기
*
* param 설명
*
* options = {
* addHour(Integer),
* addMinute(Integer),
* addSeconds(Integer),
* separator(String)
* }
*/
getFullTime: function (options) {
if (this.isEmpty(options) == true) {
options = {
addHour: 0,
addMinute: 0,
addSeconds: 0,
separator: "-",
};
} else {
options.addHour = options.addHour || 0;
options.addMinute = options.addMinute || 0;
options.addSeconds = options.addSeconds || 0;
options.separator = options.separator || ":";
}
var date = new Date();
date.setHours(date.getHours() + options.addHour);
date.setMinutes(date.getMinutes() + options.addMinute);
date.setSeconds(date.getSeconds() + options.addSeconds);
var h = date.getHours();
var m = date.getMinutes();
var s = date.getSeconds();
return (
this.prefixZero(h, 2) +
":" +
this.prefixZero(m, 2) +
":" +
this.prefixZero(s, 2)
);
},
/**
* 시간 구하기
*
* param 설명
*
* options = {
* addHour(Integer),
* addMinute(Integer),
* separator(String)
* }
*/
getTime: function (options) {
if (this.isEmpty(options) == true) {
options = {
addHour: 0,
addMinute: 0,
separator: "-",
};
} else {
options.addHour = options.addHour || 0;
options.addMinute = options.addMinute || 0;
options.separator = options.separator || ":";
}
var date = new Date();
date.setHours(date.getHours() + options.addHour);
date.setMinutes(date.getMinutes() + options.addMinute);
var h = date.getHours();
var m = date.getMinutes();
return this.prefixZero(h, 2) + ":" + this.prefixZero(m, 2);
},
/**
* 특정 길이만큼 앞에'0' 붙이기
*
* param 설명
*
* text(String or Integer): 맨 뒤에 붙일 문자열(숫자든 문자든 상관웞음)
* length(Integer): 해당 값 만큼 '0'을 붙임 (단, text의 문자열 길이를 뺌)
* ex) this.prefixZero(2, 5) => 00002, this.prefixZero(20, 5) => 00020
*
*/
prefixZero: function (text, length) {
var zero = "";
var suffix = text;
if (typeof text === "number") {
suffix = text.toString();
}
if (suffix.length < length) {
for (let i = 0; i < length - suffix.length; i++) {
zero += "0";
}
}
return zero + suffix;
},
/**
* Date => text
*/
dateToText: function (date) {
var d = new Date(date);
var yyyy = d.getFullYear();
var mm = d.getMonth() + 1;
var dd = d.getDate();
return yyyy + "-" + this.prefixZero(mm, 2) + "-" + this.prefixZero(dd, 2);
},
/**
* 최솟값은 포함, 최댓값은 제외한 정수 난수 생성(최솟값 ~ 최댓값 - 1)
*
* param 설명
*
* min(Integer): 난수 생성시, 최소값
* max(Integer): 난수 생성시, 최대값
*
* ex) getRandomInt(2, 5) => 2~5사이의 정수 난수 값 리턴
*/
getRandomInt: function (min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min)) + min;
},
/**
* 현재 시스템의 URL 조회
*
* ex) http://localohst:8080, https://www.naver.com
*/
getSystemURL: function () {
var url = window.location.protocol + "//" + window.location.host;
return url;
},
/**
* 현재 시스템의 URL 경로 조회
*
* ex) http://localohst:8080/dataset/datasetPostList => /dataset/datasetPostList
*/
getSystemPath: function () {
var path = window.location.pathname;
return path;
},
/**
* 3글자 마다 콤마 찍기 (돈)
*
* ex) 10000 => 10,000
*/
comma: function (text) {
try {
return text.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
} catch (e) {
if (this.isEmpty(text) == true) {
return "-";
} else {
return text;
}
}
},
removeTag: function (data) {
// HTML 태그 제거
data = data.replace(/<[^>]+>/g, '');
// HTML 엔티티 제거
data = data.replace(/&[^;]+;/g, '');
return data;
},
/**
* 3글자 마다 콤마 찍기 (돈)
*
* ex) 10,000 => 10000
*/
removeComma: function (text) {
try {
return text.toString().replace(/,/g, "");
} catch (e) {
if (this.isEmpty(text) == true) {
return "-";
} else {
return text;
}
}
},
/**
* json 데이터 가지고 오기 (외부 JSON 파일 PATH or URL) (동기 요청)
*/
getJsonByPromise: function (url, isAsync) {
if (this.isEmpty(url) == true) {
new Error(
"COMMON_UTIL - getJson(url, isAsync) Error : url(parameter) is empty"
);
}
if (this.isEmpty(isAsync) == true) {
isAsync = true;
}
return new Promise(function (resolve, reject) {
var xhr = new XMLHttpRequest();
xhr.onload = function (e) {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
resolve(JSON.parse(this.responseText));
} else {
reject(this);
}
}
};
xhr.onerror = function (e) {
reject(this);
};
xhr.open("GET", url, isAsync);
//xhr.responseType='json';
xhr.send(null);
});
},
/**
* json 데이터 가지고 오기 (동기 요청) (외부 JSON 파일 PATH or URL)
*/
getJsonBySync: function (url) {
var result = {};
if (this.isEmpty(url) == true) {
new Error(
"COMMON_UTIL - getJson(url, isAsync) Error : url(parameter) is empty"
);
return result;
}
var xhr = new XMLHttpRequest();
xhr.onload = function (e) {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
result = JSON.parse(this.responseText);
} else {
console.error(this);
}
}
};
xhr.onerror = function (e) {
console.error(this);
};
xhr.open("GET", url, false);
xhr.send(null);
return result;
},
/**
* 포커스 가능한 요소 가져오기
*/
getFocusableElements(container = document) {
return Array.from(
container.querySelectorAll(
'a, button, input, textarea, select, details, [tabindex]:not([tabindex="-1"])'
)
).filter(el => !el.hasAttribute('disabled'));
}
};
//초기화
function init() {
//console.info('commonUtil.js initialized.');
return _utils;
}
return init();
})();
export default COMMON_UTIL;