공통함수, 문자열 관련 자바스크립트 소스 리팩토링
parent
5b633f13fa
commit
65c0da8cbc
@ -1,455 +0,0 @@
|
|||||||
/**************************************************************************
|
|
||||||
* 동기식 대화상자
|
|
||||||
**************************************************************************/
|
|
||||||
async function confirm2(msg){
|
|
||||||
return await dialog2(msg, "confirm");
|
|
||||||
}
|
|
||||||
|
|
||||||
async function alert2(msg){
|
|
||||||
return await dialog2(msg, "alert");
|
|
||||||
}
|
|
||||||
|
|
||||||
async function prompt2(msg){
|
|
||||||
return await dialog2(msg, "prompt");
|
|
||||||
}
|
|
||||||
|
|
||||||
async function dialog2(msg, type, buttons){
|
|
||||||
var dlgId = "dlg-" + uuid();
|
|
||||||
var resp = await fetch(wctx.url("/webjars/html/dialog.html"));
|
|
||||||
var template = await resp.text();
|
|
||||||
var container = "<div class='container-fluid text-center fs-4'>{content}</div>";
|
|
||||||
if(type == "prompt"){
|
|
||||||
var rsn = '<br/><textarea type="text" id="rsn" class="form-control w-100"></textarea>';
|
|
||||||
content = container.replace(/{content}/g, msg + rsn);
|
|
||||||
} else {
|
|
||||||
content = container.replace(/{content}/g, msg);
|
|
||||||
}
|
|
||||||
var backdropID = dlgId + "-backdrop";
|
|
||||||
var tmpl = template.replace(/{id}/g, dlgId).replace(/{title}/g, "").replace(/{size}/, "").replace("","");
|
|
||||||
tmpl = tmpl.replace("modal-dialog", "modal-dialog-centered modal-dialog");
|
|
||||||
tmpl = tmpl.replace("data-bs-backdrop=\"static\"", "data-bs-backdrop=\"static\" data-bs-keyboard=\"false\"");
|
|
||||||
tmpl = tmpl.replace("text-end hidden","text-end");
|
|
||||||
tmpl = tmpl.replace("btn-primary","btn-primary btn-ok");
|
|
||||||
var dlg = $(tmpl).appendTo("body");
|
|
||||||
if(type == "confirm" || type == "alert" || type == "prompt"){
|
|
||||||
if(type == "confirm" || type == "prompt"){
|
|
||||||
dlg.find(".modal-footer").append('<button type="button" class="btn btn-primary btn-cancel">취소</button>');
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
dlg.find(".modal-footer").find(".btn-ok").remove();
|
|
||||||
|
|
||||||
for(var i=0; i < buttons.length; i++){
|
|
||||||
dlg.find(".modal-footer").append(
|
|
||||||
'<button type="button" class="btn btn-primary btn-custom" data-key="'+buttons[i].key+'" >'
|
|
||||||
+buttons[i].value
|
|
||||||
+'</button>');
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
dlg.find(".modal-header").remove();
|
|
||||||
dlg.find(".modal-body").html(content).fadeIn();
|
|
||||||
dlg.on("hidden.bs.modal", function() {
|
|
||||||
$("#" + dlgId +",#" + backdropID).remove();
|
|
||||||
});
|
|
||||||
dlg.modal("show");
|
|
||||||
$(".modal-backdrop").each(function() {
|
|
||||||
var backdrop = $(this);
|
|
||||||
if (!backdrop.prop("id")){
|
|
||||||
backdrop.prop("id", backdropID);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
setDialogZindex();
|
|
||||||
|
|
||||||
return new Promise(resolve => {
|
|
||||||
if(type == "confirm" || type == "alert" || type == "prompt"){
|
|
||||||
if(type == "prompt"){
|
|
||||||
dlg[0].querySelector(".btn-ok").addEventListener("click", () => {
|
|
||||||
dlg.modal("hide");
|
|
||||||
resolve($("#rsn").val());
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
dlg[0].querySelector(".btn-ok").addEventListener("click", () => {
|
|
||||||
dlg.modal("hide");
|
|
||||||
resolve(true);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if(type == "confirm"){
|
|
||||||
dlg[0].querySelector(".btn-cancel").addEventListener("click", () => {
|
|
||||||
dlg.modal("hide");
|
|
||||||
resolve(false);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if(type == "prompt"){
|
|
||||||
dlg[0].querySelector(".btn-cancel").addEventListener("click", () => {
|
|
||||||
dlg.modal("hide");
|
|
||||||
resolve(null);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
dlg.find(".btn-custom").each(function(){
|
|
||||||
this.addEventListener("click", () => {
|
|
||||||
dlg.modal("hide");
|
|
||||||
resolve(this.dataset.key);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**************************************************************************
|
|
||||||
* 모달창 z-index 초기화
|
|
||||||
**************************************************************************/
|
|
||||||
function setDialogZindex(){
|
|
||||||
var parentDialog = getLastOpenDialog();
|
|
||||||
var childDialog = getLastDialog();
|
|
||||||
|
|
||||||
if($(parentDialog).length == 0 || parentDialog == childDialog){
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var parentZ = $(parentDialog).css("z-index");
|
|
||||||
$(childDialog).css("z-index", Number(parentZ)+10);
|
|
||||||
|
|
||||||
var backdrop = $(childDialog).next();
|
|
||||||
if(backdrop.hasClass("modal-backdrop")){
|
|
||||||
backdrop.css("z-index", Number(parentZ)+9);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
/**************************************************************************
|
|
||||||
* 모달창 닫기 버튼 포커스
|
|
||||||
**************************************************************************/
|
|
||||||
function focusClose() {
|
|
||||||
$(document).find("div.modal").last().on('shown.bs.modal', function () {
|
|
||||||
$(this).find(".btn-close").trigger('focus');
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**************************************************************************
|
|
||||||
* 모달창 확인 버튼 포커스
|
|
||||||
**************************************************************************/
|
|
||||||
function focusOK() {
|
|
||||||
$(document).find("div.modal").last().on('shown.bs.modal', function () {
|
|
||||||
$(this).find(".modal-footer").find("button").each(function(){
|
|
||||||
if($(this).text() == "확인"){
|
|
||||||
$(this).trigger('focus');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**************************************************************************
|
|
||||||
* validation
|
|
||||||
**************************************************************************/
|
|
||||||
function customValidate(targetArr) {
|
|
||||||
var handler = validationFailureHandler();
|
|
||||||
for(var i=0;i<targetArr.length;i++){
|
|
||||||
var input = targetArr[i];
|
|
||||||
|
|
||||||
if(!validInput(input)){
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!input.required && input.value == ""){
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
//입력값의 최대 바이트 수 체크
|
|
||||||
if(input.dataset.maxlengthb){
|
|
||||||
if(!isMaxByte(input.value, input.dataset.maxlengthb)){
|
|
||||||
handler.tooLong(input);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//입력값의 포맷형식 체크
|
|
||||||
if(input.dataset.fmtType){
|
|
||||||
if(input.dataset.fmtType == "day"){
|
|
||||||
if(!isDate(input.value)){
|
|
||||||
handler.typeMismatch(input);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(input.dataset.fmtType == "time"){
|
|
||||||
if(!isTime(input.value)){
|
|
||||||
handler.typeMismatch(input);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(input.dataset.fmtType == "zeroLpadNumber"){
|
|
||||||
if(!isDigitString(input.value)){
|
|
||||||
handler.typeMismatch(input);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 문자열이 숫자형인지의 여부를 반환한다.
|
|
||||||
* @param exceptChar - 추가 허용할 문자
|
|
||||||
* @return 숫자형여부
|
|
||||||
*/
|
|
||||||
function isNumber(str, exceptChar) {
|
|
||||||
return (/^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/).test(str.replaceAll(exceptChar,"")) ? true : false;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 문자열이 숫자형문자 인지의 여부를 반환한다.(0~9만 허용)
|
|
||||||
* @param
|
|
||||||
* @return 숫자형문자 여부
|
|
||||||
*/
|
|
||||||
function isDigitString(str) {
|
|
||||||
return (/^[0-9]+$/).test(str) ? true : false;
|
|
||||||
};
|
|
||||||
|
|
||||||
// 시간체크
|
|
||||||
function isTime(str) {
|
|
||||||
|
|
||||||
str = str.replaceAll(":","");
|
|
||||||
|
|
||||||
if(str.length != 6){
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isNumber(str, "")) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
var hour = str.substring(0,2);
|
|
||||||
var minute = str.substring(2,4);
|
|
||||||
var second = str.substring(4,6);
|
|
||||||
|
|
||||||
if(hour>="00" && hour<="23"){
|
|
||||||
if(minute>="00" && minute<="59"){
|
|
||||||
if(second>="00" && second<="59"){
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 날짜체크
|
|
||||||
function isDate(str) {
|
|
||||||
|
|
||||||
str = str.replaceAll("-","");
|
|
||||||
|
|
||||||
if(str.length != 8){
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isNumber(str, "")) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 숫자, length 확인
|
|
||||||
var year = str.substring(0,4);
|
|
||||||
var month = str.substring(4,6);
|
|
||||||
var day = str.substring(6,8);
|
|
||||||
|
|
||||||
// 유효날짜 확인
|
|
||||||
if (year>="0001" && year<="9999" && month>="01" && month<="12") {
|
|
||||||
febDays = "29";
|
|
||||||
if ((parseInt(year,10) % 4) == 0) {
|
|
||||||
if ((parseInt(year,10) % 100) == 0 && (parseInt(year,10) % 400) != 0){
|
|
||||||
febDays = "28";
|
|
||||||
}
|
|
||||||
}else{
|
|
||||||
febDays = "28";
|
|
||||||
}
|
|
||||||
if (month=="01" && day>="01" && day<="31") return true;
|
|
||||||
if (month=="02" && day>="01" && day<=febDays) return true;
|
|
||||||
if (month=="03" && day>="01" && day<="31") return true;
|
|
||||||
if (month=="04" && day>="01" && day<="30") return true;
|
|
||||||
if (month=="05" && day>="01" && day<="31") return true;
|
|
||||||
if (month=="06" && day>="01" && day<="30") return true;
|
|
||||||
if (month=="07" && day>="01" && day<="31") return true;
|
|
||||||
if (month=="08" && day>="01" && day<="31") return true;
|
|
||||||
if (month=="09" && day>="01" && day<="30") return true;
|
|
||||||
if (month=="10" && day>="01" && day<="31") return true;
|
|
||||||
if (month=="11" && day>="01" && day<="30") return true;
|
|
||||||
if (month=="12" && day>="01" && day<="31") return true;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 문자열이 지정한 최소길이 이상인지의 여부를 반환한다.
|
|
||||||
* @param minLen - 최소길이
|
|
||||||
* @return 최소길이 이상인지의 여부
|
|
||||||
*/
|
|
||||||
function isMin(str, minLen) {
|
|
||||||
return str.length >= minLen;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 문자열이 지정한 최대길이 이하인지의 여부를 반환한다.
|
|
||||||
* @param maxLen - 최대길이
|
|
||||||
* @return 최대길이 이하인지의 여부
|
|
||||||
*/
|
|
||||||
function isMax(str, maxLen) {
|
|
||||||
return str.length <= maxLen;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 문자열이 지정한 최소바이트수 이상인지의 여부를 반환한다.
|
|
||||||
* @param minByte - 최소바이트수
|
|
||||||
* @return 최소바이트수 이상인지의 여부
|
|
||||||
*/
|
|
||||||
function isMinByte(str, minByte) {
|
|
||||||
return getByte(str) >= minByte;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 문자열이 지정한 최대바이트수 이하인지의 여부를 반환한다.
|
|
||||||
* @param maxByte - 최대바이트수
|
|
||||||
* @return 최대바이트수 이하인지의 여부
|
|
||||||
*/
|
|
||||||
function isMaxByte(str, maxByte) {
|
|
||||||
return getByte(str) <= maxByte;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 문자열이 영어만으로 구성되어 있는지의 여부를 반환한다.
|
|
||||||
* @param exceptChar - 추가 허용할 문자
|
|
||||||
* @return 영어만으로 구성되어 있는지의 여부
|
|
||||||
*/
|
|
||||||
function isEng(str, exceptChar) {
|
|
||||||
return (/^[a-zA-Z]+$/).test(str.replaceAll(exceptChar,"")) ? true : false;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 문자열이 숫자와 영어만으로 구성되어 있는지의 여부를 반환한다.
|
|
||||||
* @param exceptChar - 추가 허용할 문자
|
|
||||||
* @return 숫자와 영어만으로 구성되어 있는지의 여부
|
|
||||||
*/
|
|
||||||
function isEngNum(str, exceptChar) {
|
|
||||||
return (/^[0-9a-zA-Z]+$/).test(str.replaceAll(exceptChar,"")) ? true : false;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 이메일 주소의 유효성 여부를 반환한다.
|
|
||||||
* @return 유효성 여부
|
|
||||||
*/
|
|
||||||
function isEmail(str) {
|
|
||||||
return /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i.test(str);
|
|
||||||
};
|
|
||||||
|
|
||||||
/**************************************************************************
|
|
||||||
* 엑셀 파일 작성 정보 생성
|
|
||||||
**************************************************************************/
|
|
||||||
function getCellDefs($ths, $tds, fieldGetterOption){
|
|
||||||
var cellDefs = [];
|
|
||||||
|
|
||||||
for(var i=0; i < $ths.length; i++){
|
|
||||||
|
|
||||||
var label = $ths.eq(i).text();
|
|
||||||
label = label.replace("\n", "");
|
|
||||||
label = label.replace("\t", "");
|
|
||||||
label = label.replace(" ", "");
|
|
||||||
|
|
||||||
if(label != ""){
|
|
||||||
|
|
||||||
var width = $ths.eq(i).outerWidth();
|
|
||||||
width = Math.ceil(width/10) + 2;
|
|
||||||
|
|
||||||
var field = "";
|
|
||||||
if(fieldGetterOption != null){
|
|
||||||
field = fieldGetterOption($tds.eq(i));
|
|
||||||
} else {
|
|
||||||
field = $tds.eq(i).text();
|
|
||||||
}
|
|
||||||
|
|
||||||
field = field.replace("{", "");
|
|
||||||
field = field.replace("}", "");
|
|
||||||
field = field.replace("\n", "");
|
|
||||||
field = field.replace("\t", "");
|
|
||||||
field = field.replace(" ", "");
|
|
||||||
|
|
||||||
var cellDef = {
|
|
||||||
label : label,
|
|
||||||
width : width,
|
|
||||||
field : field
|
|
||||||
};
|
|
||||||
|
|
||||||
cellDefs.push(cellDef);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return JSON.stringify(cellDefs);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//마지막으로 열린 다이얼로그 영역을 반환한다.
|
|
||||||
function getLastOpenDialog(){
|
|
||||||
return $("div.modal.show").last()[0];
|
|
||||||
}
|
|
||||||
//마지막으로 생성된 다이얼로그 영역을 반환환다.
|
|
||||||
function getLastDialog(){
|
|
||||||
return $("div.modal").last()[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**************************************************************************
|
|
||||||
* 지연
|
|
||||||
**************************************************************************/
|
|
||||||
function sleep(ms) {
|
|
||||||
return new Promise((r) => setTimeout(r, ms));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**************************************************************************
|
|
||||||
* String util
|
|
||||||
**************************************************************************/
|
|
||||||
/**
|
|
||||||
* 문자열의 byte 길이를 반환한다.
|
|
||||||
* @return 문자열의 byte 길이
|
|
||||||
*/
|
|
||||||
function getByte(str) {
|
|
||||||
|
|
||||||
if ( str == null || str.length == 0 ) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
var size = 0;
|
|
||||||
for ( var i=0, len=str.length ; i < len ;i++ ) {
|
|
||||||
var charCode = str.charCodeAt(i),
|
|
||||||
charSize = 0;
|
|
||||||
|
|
||||||
if ( charCode <= 0x00007F ) { //127
|
|
||||||
charSize = 1;
|
|
||||||
} else if ( charCode <= 0x0007FF) { //2047
|
|
||||||
charSize = 2;
|
|
||||||
} else if ( charCode <= 0x00FFFF) { //65535
|
|
||||||
charSize = 3;
|
|
||||||
} else {
|
|
||||||
charSize = 4;
|
|
||||||
}
|
|
||||||
size += charSize;
|
|
||||||
}
|
|
||||||
return size;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,257 @@
|
|||||||
|
class StringSupport {
|
||||||
|
|
||||||
|
static help(){
|
||||||
|
console.log("snakeToCamel(문자열) : 스네이크 표기법을 카멜 표기법으로 변경한다.");
|
||||||
|
console.log("camelToKebab(문자열) : 카멜 표기법을 케밥 표기법으로 변경한다.");
|
||||||
|
console.log("escapeHTMLEntity(문자열) : HTML 엔티티 문자코드를 특수문자로 치환한다.");
|
||||||
|
console.log("isNumber(문자열,추가허용할문자) : 문자열이 숫자형인지의 여부를 반환한다.");
|
||||||
|
console.log("isDigitString(문자열) : 문자열이 숫자형문자 인지의 여부를 반환한다.(0~9만 허용)");
|
||||||
|
console.log("isTime(문자열) : 문자열이 시간형식인지의 여부");
|
||||||
|
console.log("isDate(문자열) : 문자열이 날짜형식인지의 여부");
|
||||||
|
console.log("isMin(문자열,최소길이) : 문자열이 지정한 최소길이 이상인지의 여부를 반환한다.");
|
||||||
|
console.log("isMax(문자열,최대길이) : 문자열이 지정한 최대길이 이하인지의 여부를 반환한다.");
|
||||||
|
console.log("isMinByte(문자열,최소바이트수) : 문자열이 지정한 최소바이트수 이상인지의 여부를 반환한다.");
|
||||||
|
console.log("isMaxByte(문자열,최대바이트수) : 문자열이 지정한 최대바이트수 이하인지의 여부를 반환한다.");
|
||||||
|
console.log("isEng(문자열,추가허용할문자) : 문자열이 영어만으로 구성되어 있는지의 여부를 반환한다.");
|
||||||
|
console.log("isEngNum(문자열,추가허용할문자) : 문자열이 숫자와 영어만으로 구성되어 있는지의 여부를 반환한다.");
|
||||||
|
console.log("isEmail(문자열) : 이메일 주소의 유효성 여부를 반환한다.");
|
||||||
|
console.log("getByte(문자열) : 문자열의 byte 길이를 반환한다.");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 스네이크 표기법을 카멜 표기법으로 변경한다.
|
||||||
|
* @return 치환된 문자열
|
||||||
|
*/
|
||||||
|
static snakeToCamel(text){
|
||||||
|
text = text.toLowerCase();
|
||||||
|
var arrUnderbar = text.match(/\_[a-zA-Z]/g);
|
||||||
|
if(arrUnderbar){
|
||||||
|
for(var j = 0; j < arrUnderbar.length; j++) {
|
||||||
|
text = text.replace(arrUnderbar[j], arrUnderbar[j].toUpperCase().replace("_", ""));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return text;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 카멜 표기법을 케밥 표기법으로 변경한다.
|
||||||
|
* @return 치환된 문자열
|
||||||
|
*/
|
||||||
|
static camelToKebab(text){
|
||||||
|
return text.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* HTML 엔티티 문자코드를 특수문자로 치환한다.
|
||||||
|
* @return 치환된 문자열
|
||||||
|
*/
|
||||||
|
static escapeHTMLEntity(str) {
|
||||||
|
if(str == undefined || str == null){
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
var regex = /&(amp|lt|gt|quot|#39);/g;
|
||||||
|
var chars = {
|
||||||
|
'&': '&',
|
||||||
|
'<': '<',
|
||||||
|
'>': '>',
|
||||||
|
'"': '"',
|
||||||
|
''': "'"
|
||||||
|
};
|
||||||
|
|
||||||
|
if(regex.test(str)) {
|
||||||
|
return str.replace(regex, (matched) => chars[matched] || matched);
|
||||||
|
} else {
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 문자열이 숫자형인지의 여부를 반환한다.
|
||||||
|
* @param exceptChar - 추가 허용할 문자
|
||||||
|
* @return 숫자형여부
|
||||||
|
*/
|
||||||
|
static isNumber(str, exceptChar) {
|
||||||
|
return (/^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/).test(str.replaceAll(exceptChar,"")) ? true : false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 문자열이 숫자형문자 인지의 여부를 반환한다.(0~9만 허용)
|
||||||
|
* @param
|
||||||
|
* @return 숫자형문자 여부
|
||||||
|
*/
|
||||||
|
static isDigitString(str) {
|
||||||
|
return (/^[0-9]+$/).test(str) ? true : false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 시간체크
|
||||||
|
static isTime(str) {
|
||||||
|
|
||||||
|
str = str.replaceAll(":","");
|
||||||
|
|
||||||
|
if(str.length != 6){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!StringSupport.isNumber(str, "")) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
var hour = str.substring(0,2);
|
||||||
|
var minute = str.substring(2,4);
|
||||||
|
var second = str.substring(4,6);
|
||||||
|
|
||||||
|
if(hour>="00" && hour<="23"){
|
||||||
|
if(minute>="00" && minute<="59"){
|
||||||
|
if(second>="00" && second<="59"){
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 날짜체크
|
||||||
|
static isDate(str) {
|
||||||
|
|
||||||
|
str = str.replaceAll("-","");
|
||||||
|
|
||||||
|
if(str.length != 8){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!StringSupport.isNumber(str, "")) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 숫자, length 확인
|
||||||
|
var year = str.substring(0,4);
|
||||||
|
var month = str.substring(4,6);
|
||||||
|
var day = str.substring(6,8);
|
||||||
|
|
||||||
|
// 유효날짜 확인
|
||||||
|
if (year>="0001" && year<="9999" && month>="01" && month<="12") {
|
||||||
|
febDays = "29";
|
||||||
|
if ((parseInt(year,10) % 4) == 0) {
|
||||||
|
if ((parseInt(year,10) % 100) == 0 && (parseInt(year,10) % 400) != 0){
|
||||||
|
febDays = "28";
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
febDays = "28";
|
||||||
|
}
|
||||||
|
if (month=="01" && day>="01" && day<="31") return true;
|
||||||
|
if (month=="02" && day>="01" && day<=febDays) return true;
|
||||||
|
if (month=="03" && day>="01" && day<="31") return true;
|
||||||
|
if (month=="04" && day>="01" && day<="30") return true;
|
||||||
|
if (month=="05" && day>="01" && day<="31") return true;
|
||||||
|
if (month=="06" && day>="01" && day<="30") return true;
|
||||||
|
if (month=="07" && day>="01" && day<="31") return true;
|
||||||
|
if (month=="08" && day>="01" && day<="31") return true;
|
||||||
|
if (month=="09" && day>="01" && day<="30") return true;
|
||||||
|
if (month=="10" && day>="01" && day<="31") return true;
|
||||||
|
if (month=="11" && day>="01" && day<="30") return true;
|
||||||
|
if (month=="12" && day>="01" && day<="31") return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 문자열이 지정한 최소길이 이상인지의 여부를 반환한다.
|
||||||
|
* @param minLen - 최소길이
|
||||||
|
* @return 최소길이 이상인지의 여부
|
||||||
|
*/
|
||||||
|
static isMin(str, minLen) {
|
||||||
|
return str.length >= minLen;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 문자열이 지정한 최대길이 이하인지의 여부를 반환한다.
|
||||||
|
* @param maxLen - 최대길이
|
||||||
|
* @return 최대길이 이하인지의 여부
|
||||||
|
*/
|
||||||
|
static isMax(str, maxLen) {
|
||||||
|
return str.length <= maxLen;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 문자열이 지정한 최소바이트수 이상인지의 여부를 반환한다.
|
||||||
|
* @param minByte - 최소바이트수
|
||||||
|
* @return 최소바이트수 이상인지의 여부
|
||||||
|
*/
|
||||||
|
static isMinByte(str, minByte) {
|
||||||
|
return StringSupport.getByte(str) >= minByte;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 문자열이 지정한 최대바이트수 이하인지의 여부를 반환한다.
|
||||||
|
* @param maxByte - 최대바이트수
|
||||||
|
* @return 최대바이트수 이하인지의 여부
|
||||||
|
*/
|
||||||
|
static isMaxByte(str, maxByte) {
|
||||||
|
return StringSupport.getByte(str) <= maxByte;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 문자열이 영어만으로 구성되어 있는지의 여부를 반환한다.
|
||||||
|
* @param exceptChar - 추가 허용할 문자
|
||||||
|
* @return 영어만으로 구성되어 있는지의 여부
|
||||||
|
*/
|
||||||
|
static isEng(str, exceptChar) {
|
||||||
|
return (/^[a-zA-Z]+$/).test(str.replaceAll(exceptChar,"")) ? true : false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 문자열이 숫자와 영어만으로 구성되어 있는지의 여부를 반환한다.
|
||||||
|
* @param exceptChar - 추가 허용할 문자
|
||||||
|
* @return 숫자와 영어만으로 구성되어 있는지의 여부
|
||||||
|
*/
|
||||||
|
static isEngNum(str, exceptChar) {
|
||||||
|
return (/^[0-9a-zA-Z]+$/).test(str.replaceAll(exceptChar,"")) ? true : false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 이메일 주소의 유효성 여부를 반환한다.
|
||||||
|
* @return 유효성 여부
|
||||||
|
*/
|
||||||
|
static isEmail(str) {
|
||||||
|
return /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i.test(str);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 문자열의 byte 길이를 반환한다.
|
||||||
|
* @return 문자열의 byte 길이
|
||||||
|
*/
|
||||||
|
static getByte(str) {
|
||||||
|
|
||||||
|
if ( str == null || str.length == 0 ) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
var size = 0;
|
||||||
|
for ( var i=0, len=str.length ; i < len ;i++ ) {
|
||||||
|
var charCode = str.charCodeAt(i),
|
||||||
|
charSize = 0;
|
||||||
|
|
||||||
|
if ( charCode <= 0x00007F ) { //127
|
||||||
|
charSize = 1;
|
||||||
|
} else if ( charCode <= 0x0007FF) { //2047
|
||||||
|
charSize = 2;
|
||||||
|
} else if ( charCode <= 0x00FFFF) { //65535
|
||||||
|
charSize = 3;
|
||||||
|
} else {
|
||||||
|
charSize = 4;
|
||||||
|
}
|
||||||
|
size += charSize;
|
||||||
|
}
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue