mjon_git/src/main/webapp/js/MJUtill.js

866 lines
20 KiB
JavaScript

/**
* 휴대폰번호 유효성 체크
* true, false 반환
* 대시 유무 상관없음
*/
function checkHpNum(str) {
var regExp = /^(050[234567]{1}|01[016789]{1})-?[0-9]{3,4}-?[0-9]{4}$/;
//var regExp = /^(01[016789]{1}|070|02|0[3-9]{1}[0-9]{1})-?[0-9]{3,4}-?[0-9]{4}$/; //지역번호(일반전화) 형식까지 체크해주는 정규식
return regExp.test(str);
}
/**
* 휴대폰번호만 유효성 체크
* true, false 반환
* 대시 유무 상관없음
*/
function checkOnlyHpNum(str) {
//var regExp = /^(050[234567]{1}|01[016789]{1})-?[0-9]{3,4}-?[0-9]{4}$/;
var regExp = /^(01[016789]{1})-?[0-9]{3,4}-?[0-9]{4}$/; //지역번호(일반전화) 형식까지 체크해주는 정규식
return regExp.test(str);
}
/**
* 팩스 번호 유효성 체크
* true, false 반환
* 앞 3자리를 체크 함
* -- 전국 지역번호
* 02 서울특별시
031 경기도
032 인천광역시
033 강원도
041 충청남도
042 대전광역시
043 충청북도
044 세종특별자치시
051 부산광역시
052 울산광역시
053 대구광역시
054 경상북도
055 경상남도
061 전라남도
062 광주광역시
063 전라북도
064 제주특별자치도
-- 타사부가번호
030*
050*
060
070
080
1**
위 번호로 시작하는 팩스 번호만 허용함.
*/
function checkFaxNum(str) {
str = removeDash(str);
var subNum = str.substring(0,3);
var regExp = /^(02[0-9]{1}|030|050|060|070|080|0[3-6]{1}[1-5]{1}|1[0-9]{1}[0-9]{1})$/; //지역번호(일반전화) 형식까지 체크해주는 정규식
return regExp.test(subNum);
}
/*
* 일반전화 유효성 체크
* true, false 반환
*
* */
function checkNorPhoneNum(str){
var regExp = /^(02|0[3-9]{1}[0-9]{1})-?[0-9]{3,4}-?[0-9]{4}$/;
/**
* 기간통신사업자 공통 부가서비스 번호 체크
* 번호 사업자
1588,1577,1899 KT
1544,1644,1661,1800 ,1833 LG유플러스
1566,1600,1670 SK브로드밴드
1688,1666 온세텔레콤
1599 SK텔링크
1877 한국케이블텔레콤
1855 CJ헬로비전
1661 alleh KT
*
* */
if(str.substring(0,2) == "15"){
regExp = /^(15[0-9]{2})-?[0-9]{4}$/;
}else if(str.substring(0,2) == "16"){
regExp = /^(16[0-9]{2})-?[0-9]{4}$/;
}else if(str.substring(0,2) == "18"){
regExp = /^(18[0-9]{2})-?[0-9]{4}$/;
}
return regExp.test(str);
}
/*
* 일반전화 / 핸드폰 번호 종류 확인
* true, false 반환
*
* */
function checkTelHpType(str){
var subCall = str.substring(0,3); // 전화번호 앞 3자리 받아오기
var strType = ""; // 결과 반환
if(subCall != '010'
&& subCall != '011'
&& subCall != '016'
&& subCall != '017'){//일반전화 번호이면
strType = "Tel";
}else{
strType = "Hp";
}
return strType;
}
/**
* 휴대폰번호 대시('-') 제거
*/
function removeDash(str) {
var regExp = new RegExp('-', 'g');
return str.replace(regExp, '');
}
/**
* 휴대폰번호 대시('-') 추가
* 대시 유무 상관없음
* 유효성 맞지 않을시 변환안됨.
*/
function addDash(str) {
return str.replace(/(^01[016789]{1}|070)([0-9]{3}|[0-9]{4})([0-9]{4})$/,"$1-$2-$3").replace("--", "-");
}
/**
* ReplaceAll (by javascript prototype)
* 정규식 패턴에서 \는 두 개 사용
*/
String.prototype.replaceAll = function(pattern, changeString) {
var regExp = new RegExp(pattern, 'g');
return this.replace(regExp, changeString);
};
/**
* 이메일 유효성 체크
* true, false 반환
*
*/
function checkEmail(str) {
var regExp = /^[A-Za-z0-9_\.\-]+@[A-Za-z0-9\-]+\.[A-Za-z0-9\-]+/;
return regExp.test(str);
}
/**
* XSS 체크하기
*
*
*/
function XSSCheck(str, level) {
if (level == undefined || level == 0) {
str = str.replace(/\<|\>|\"|\'|\%|\;|\(|\)|\&|\+|\-/g,"");
} else if (level != undefined && level == 1) {
str = str.replace(/\</g, "&lt;");
str = str.replace(/\>/g, "&gt;");
}
return str;
}
//숫자 천단위 콤마 찍어주기
function numberWithCommas(x) {
return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}
function comma(num){
var len, point, str;
num = num + "";
point = num.length % 3;
len = num.length;
str = num.substring(0, point);
while (point < len) {
if (str != "") str += ",";
str += num.substring(point, point + 3);
point += 3;
}
return str;
}
function totalPriceSum(totRows){
var contents = $('#smsTxtArea').val(); //입력 문자 내용
var msgType = conTypeCheck(contents); //입력 문자 길이 체크
var collNumCnt = parseInt(totRows); //받는사람 건수
var price = 0; //개별 건수 금액
var totalPrice = 0; //전체 금액
//var strDot = [];
//var subPrice = "";
//var spPrice = "";
var totalStr = "0"; //전체 합계 금액
var userMoney = $('#hdUserMoney').text(); //헤더 영역 보유 금액 불러오기
var msgCnt = 0; //발송 가능 문자 건수
var imgCnt = $("#imgCnt").val(); // 현재 페이지에 첨부된 이미지 갯수
if(!userMoney > 0){
userMoney = 0;
}
//헤더 영역 보유 금액 콤마 문자 제거
if(userMoney != ''){
userMoney = userMoney.replaceAll("," , "");
}
/*if(msgType == "P"){//그림문자
//그림 이미지 갯수에 따른 금액 계산
if(imgCnt > 2){//그림 3장일경우
price = parseFloat($('#p3Price').val());
}else if(imgCnt > 1){//그림 2장일경우
price = parseFloat($('#p2Price').val());
}else{//그림 1장일 경우
price = parseFloat($('#pPrice').val());
}
msgCnt = parseFloat(userMoney) / price;
}else if(msgType == "M"){//장문 문자
price = parseFloat($('#mPrice').val());
msgCnt = parseFloat(userMoney) / price;
}else{//단문문자
price = parseFloat($('#sPrice').val());
msgCnt = parseFloat(userMoney) / price;
}*/
//금액 소수점 제거 하여 적용 20220623 소수점 버림 처리
if(msgType == "P"){//그림문자
//그림 이미지 갯수에 따른 금액 계산
if(imgCnt > 2){//그림 3장일경우
price = $('#p3Price').val();
}else if(imgCnt > 1){//그림 2장일경우
price = $('#p2Price').val();
}else{//그림 1장일 경우
price = $('#pPrice').val();
}
msgCnt = userMoney / price;
}else if(msgType == "M"){//장문 문자
price = $('#mPrice').val();
msgCnt = userMoney / price;
}else{//단문문자
price = $('#sPrice').val();
msgCnt = userMoney / price;
}
totalPrice = price * collNumCnt;
// 소수점 첫째자리 까지 표시
totalPrice = totalPrice.toFixed(1);
if(totalPrice > 0){
//totalStr = totalPrice.toFixed(2);
totalStr = totalPrice;
}
//개별 문자 단가 파라미터에 입력
$('#eachPrice').val(numberWithCommas(price));
//결제금액 합계 파라이터에 입력
$('#totPrice').val(numberWithCommas(totalStr));
//결제금액 합계 화면에 표시
$('#totalPriceTxt').text(numberWithCommas(totalStr));
//현재 문자 전송 가능 갯수 표시
$('.nowMsgCnt').text(numberWithCommas(msgCnt.toFixed()));
if(msgType == 'P'){
$('#nowMsgType').text("그림");
}else if(msgType == 'M'){
$('#nowMsgType').text("장문");
}else{
$('#nowMsgType').text("단문");
}
$('#repPriceTxt').hide();
return totalStr;
}
function replTotalPriceSum(msg_short, msg_long, totRows){
var shortPrice = 0; //단문 개별 건수 금액
var longPrice = 0; //장문 개별 건수 금액
var imgPrice = 0; //그림문자 개별 건수 금액
var totalPrice = 0; //전체 금액
var totalStr = "0"; //전체 합계 금액
var contents = $('#smsTxtArea').val(); //입력 문자 내용
var msgType = conTypeCheck(contents); //입력 문자 길이 체크
var userMoney = $('#hdUserMoney').text(); //헤더 영역 보유 금액 불러오기
var msgCnt = 0; //발송 가능 문자 건수
var imgCnt = $("#imgCnt").val(); // 현재 페이지에 첨부된 이미지 갯수
var collNumCnt = parseInt(totRows); //받는사람 건수
var totalCntTxt = "";
//금액 소수점 제거하여 금액 처리
if(msgType == "P"){//그림문자
//그림 이미지 갯수에 따른 금액 계산
if(imgCnt > 2){//그림 3장일경우
imgPrice = $('#p3Price').val();
}else if(imgCnt > 1){//그림 2장일경우
imgPrice = $('#p2Price').val();
}else{//그림 1장일 경우
imgPrice = $('#pPrice').val();
}
msgCnt = userMoney.replaceAll(",","") / imgPrice;
var imgTotPrice = imgPrice * collNumCnt;
imgTotPrice = Math.round(imgTotPrice * 100) / 100; //소수점 2자리 반올리 처리해주기
totalPrice = totalPrice + imgTotPrice;
//input hidden 개별 문자 단가 파라미터에 입력
$('#eachPrice').val(numberWithCommas(imgPrice));
//input hidden 결제금액 합계 파라이터에 입력
$('#totPrice').val(numberWithCommas(totalStr));
//결제금액 합계 화면에 표시
$('#totalPriceTxt').text(numberWithCommas(totalStr));
//현재 문자 전송 가능 갯수 표시
$('.nowMsgCnt').text(numberWithCommas(msgCnt.toFixed()));
//변환문자 건수 내용 표기
totalCntTxt = "그림 : <strong>" + totRows + "</strong> 건";;
}else{
if(msg_long > 0){//장문 문자
longPrice = $('#mPrice').val();
var longTotPrice = longPrice * msg_long;
longTotPrice = Math.round(longTotPrice * 100) / 100; //소수점 2자리 반올리 처리해주기
totalPrice = totalPrice + longTotPrice;
//input hidden 개별 문자 단가 파라미터에 입력
$('#eachPrice').val(numberWithCommas(longPrice));
//변환문자 건수 내용 표기
totalCntTxt = "장문 : <strong>" + msg_long + "</strong> 건";
//변환장문 건수 Hidden 폼에 넣어주기
$('#longMsgCnt').val(msg_long);
}else{
//변환장문 건수 Hidden 폼에 넣어주기
$('#longMsgCnt').val(msg_long);
}
if(msg_short > 0){//단문문자
shortPrice = $('#sPrice').val();
var shortTotPrice = shortPrice * msg_short;
shortTotPrice = Math.round(shortTotPrice * 100) / 100; //소수점 2자리 반올리 처리해주기
totalPrice = totalPrice + shortTotPrice;
//input hidden 개별 문자 단가 파라미터에 입력
$('#eachPrice').val(numberWithCommas(shortPrice));
if(msg_long > 0){
//변환문자 건수 내용 표기
totalCntTxt = totalCntTxt + "/ 단문 : <strong>" + msg_short + "</strong> 건";
}else{
//변환문자 건수 내용 표기
totalCntTxt = "단문 : <strong>" + msg_short + "</strong> 건";
}
//변환단문 건수 Hidden 폼에 넣어주기
$('#shortMsgCnt').val(msg_short);
}else{
//변환단문 건수 Hidden 폼에 넣어주기
$('#shortMsgCnt').val(msg_short);
}
}
if(totalPrice > 0){
//totalStr = totalPrice.toFixed(2);
totalStr = totalPrice;
}
//input hidden 결제금액 합계 파라이터에 입력
$('#totPrice').val(numberWithCommas(totalStr));
//결제금액 합계 화면에 표시
$('#totalPriceTxt').text(numberWithCommas(totalStr));
//결제금액 합계 파라이터에 입력
$('#totPrice').val(numberWithCommas(totalStr));
//특정문구 일괄 변환으로 인한 단/장문 건수 표시
$('#repPriceTxt').show();
$('#repPriceTxt').html("(" + totalCntTxt + ")");
if(msgType == 'P'){
$('#nowMsgType').text("그림");
}else if(msgType == 'M'){
$('#nowMsgType').text("장문");
}else{
$('#nowMsgType').text("단문");
}
return totalStr;
}
//예약 날짜 체크 함수
function getGday(date) { /* 현재와 이전 날자의 차이를 년-개월-일 형태로 가져오기 */
var now = new Date().getTime(); // 현재 날짜를 시간으로 변환
var d = new Date(date.substring(0, 10)).getTime(); // 이전 날짜를 시간으로 변환
var gap = now - d; // 현재 날짜와 이전 날짜의 차이를 밀리초 시간으로 구한다.
var result = Math.floor(gap/(1000 * 60 * 60 * 24)); // 날짜 차이를 일수로 계산
var year = Math.floor(result / 365); // 현재 날짜 년 - 개월 - 일 수로 표현하기
var month = Math.floor(result % 365 / 30);
var day = result % 365 % 30;
return result;
//각 년도, 월, 일을 따로 리턴하려면 아래를 사용하면 됨
/* return {
year: year,
month: month,
day: day
}; */
}
/*
* 예약 날짜 오류 체크 함수
* 날짜, 시간, 분 파라미터 전달
* 현재 날짜와 파라미터 시간의 분 간격 계산해주기
* */
function getGapDayTime(paramDate,paramHours,paramMin) { /* 현재와 이전 날자의 차이를 년-개월-일 형태로 가져오기 */
var now = new Date();
//현재시간 구분하기
var year = now.getFullYear();
var month = now.getMonth() + 1 ;
var day = now.getDate();
var hours = now.getHours();
var min = now.getMinutes();
//비교시간
var stDt = paramDate.split("/");
var stYear = stDt[0];
var stMonth = stDt[1];
var stDay = stDt[2];
var nowDate = new Date(year, month-1, day, hours, min);
var stDate = new Date(stYear, stMonth-1, stDay, paramHours, paramMin);
var elapsedMSec = stDate.getTime() - nowDate.getTime();
var elapseMin = elapsedMSec / 1000 / 60;
elapseMin = parseInt(elapseMin);
return elapseMin;
//각 년도, 월, 일을 따로 리턴하려면 아래를 사용하면 됨
/* return {
year: year,
month: month,
day: day
}; */
}
// 중복 주소 체크하기
/*function dupliAddrData(data){
var chk = true; //중복값 유무
var uniqData = []; // 중복값 삭제 후 데이터 저장
var dupCnt = 0;
//첨부 주소 정보에서 연락처가 중복되는 경우 하나만 남기고 나머지는 삭제 하고 보여줌
$.each(data, function(i, item){
chk = true; //중복값 유무
$.each(uniqData, function(j, item2){
if(item.phone == item2.phone){
chk = false;
dupCnt = dupCnt + 1;
console.log("++++++++++++++ dupCnt ::: "+ dupCnt);
}
});
if(chk){
uniqData.push(item);
}
});
$("#rowDupCnt").text(dupCnt);
return uniqData;
}*/
var dupliPhoneDataRealList = [];
//중복 전화번호 체크하기
function dupliPhoneData(data){
var chk = true; //중복값 유무
var uniqData = []; // 중복값 삭제 후 데이터 저장
var dupCnt = 0;
//첨부 주소 정보에서 연락처가 중복되는 경우 하나만 남기고 나머지는 삭제 하고 보여줌
$.each(data, function(i, item){
chk = true; //중복값 유무
$.each(uniqData, function(j, item2){
if(item.phone.length > 0){
if(item.phone == item2.phone){
chk = false;
dupCnt = dupCnt + 1;
}
}
});
if(chk){
uniqData.push(item);
}
else {
// Get 중복 연락처
GetDupliPhoneDataReal(item.phone);
}
});
//중복건수 텍스트 입력해 주기
$("#rowDupCnt").text(dupCnt);
// 중복번호 버튼 노출
if($("#btnAddrMassDupli").length > 0) {
$("#btnAddrMassDupli").show();
}
// 중복번호(기존 주소록) 버튼 노출
if($("#btnAddrMassSaveDupli").length > 0) {
$("#btnAddrMassSaveDupli").hide();
}
return uniqData;
}
// Get 중복 연락처
function GetDupliPhoneDataReal(item) {
var isDuplicate = false;
if (dupliPhoneDataRealList.length == 0) {
dupliPhoneDataRealList.push(item);
}
else {
for (var i = 0; i < dupliPhoneDataRealList.length; i++) {
if (dupliPhoneDataRealList[i] == item) {
isDuplicate = true;
}
}
if (isDuplicate) {
return;
}
else {
dupliPhoneDataRealList.push(item);
}
}
}
//중복 전화번호 체크하여 중복 갯수 리턴하기
function dupliPhoneDataChk(data){
var chk = true; //중복값 유무
var uniqData = []; // 중복값 삭제 후 데이터 저장
var dupCnt = 0;
//첨부 주소 정보에서 연락처가 중복되는 경우 하나만 남기고 나머지는 삭제 하고 보여줌
$.each(data, function(i, item){
chk = true; //중복값 유무
$.each(uniqData, function(j, item2){
if(item.phone.length > 0){
if(item.phone == item2.phone){
chk = false;
dupCnt = dupCnt + 1;
}
}
});
if(chk){
uniqData.push(item);
}
});
return dupCnt;
}
//특정 바이트수 만큼 문자열 잘라서 반환해주기
function strUnderLineSubstring(str, maxLength){
for(b=i=0;c=str.charCodeAt(i);) {
b+=c>>7?2:1;
if (b > maxLength)
break;
i++;
}
return str.substring(0,i);
}
//특정 글자수 만큼 문자열 잘라서 반환해주기
function strMaxLengthSubstring(str, maxLength){
for(b=i=0;c=str.charCodeAt(i);) {
if (i > maxLength)
break;
i++;
}
return str.substring(0,i);
}
//문자열 글자수 반환해주기(한글, 영문, 특수문자, 엔터와 상관없이 글자수로 체크함)
function strMaxCharacterCnt(str){
var totLen = 0;
for(b=i=0;c=str.charCodeAt(i);) {
i++;
totLen = i;
}
return totLen;
}
//문자입력 첫번째 글자가 한글, 숫자, 영문자가 아니면 경고 표시
function strFirstCharCheck(str){
var pattern1 = /[0-9]/;
var pattern2 = /[a-zA-Z]/;
var pattern3 = /[ㄱ-ㅎ|ㅏ-ㅣ|가-힣]/;
var spChar = 0;
for(var i=0; i<str.length; i++){
if (!pattern1.test(str.charAt(i)) && !pattern2.test(str.charAt(i)) && !pattern3.test(str.charAt(i))) {
spChar++;
}else{
break;
}
}
var repStr = str.substring(0,spChar);
return repStr;
}
function strChinJpnCheck(str){
var rtnStr = "";
for(var i=0; i < str.length; i++){
var cont = str.charAt(i);
if(str.charAt(i) >= '\u4E00' && str.charAt(i) <= '\u9FFF'){//한중일 공통한자일 경우
if(rtnStr.length == 0){
rtnStr = cont;
}else{
rtnStr = rtnStr + ", " + cont;
}
}else if(str.charAt(i) >= '\u2E80' && str.charAt(i) <= '\u2EFF'){//한자부수
if(rtnStr.length == 0){
rtnStr = cont;
}else{
rtnStr = rtnStr + ", " + cont;
}
}else if(str.charAt(i) >= '\u3400' && str.charAt(i) <= '\u4DB5'){//한자확장A
if(rtnStr.length == 0){
rtnStr = cont;
}else{
rtnStr = rtnStr + ", " + cont;
}
}
}
return rtnStr;
}
//받아온 str 에 이모지가 포함되어있는지 체크하여 갯수로 반환
function emojiCheck (str) {
var regex = /[\u{1F004}-\u{1F9E6}]|[\u{1F600}-\u{1F9D0}]/gu;
var usedEmoji = "";
var returnFlag = true;
var splitMsg = str.split(/.*?/u);
for(var i=0; i < splitMsg.length; i++){
if(splitMsg[i].match(regex)) {
usedEmoji = usedEmoji + splitMsg[i];
returnFlag = false;
}
}
if(!returnFlag) alert("문자 제목, 내용에 이모지는 사용할 수 없습니다.\n이모지 삭제후 발송해주세요.\n(" + usedEmoji + ")");
return returnFlag;
}
function addrEmojiCheck (str) {
var regex = /[\u{1F004}-\u{1F9E6}]|[\u{1F600}-\u{1F9D0}]/gu;
var usedEmoji = "";
var returnFlag = true;
var splitMsg = str.split(/.*?/u);
for(var i=0; i < splitMsg.length; i++){
if(splitMsg[i].match(regex)) {
usedEmoji = usedEmoji + splitMsg[i];
returnFlag = false;
}
}
if(!returnFlag) {
//로딩창 hide
$('.loading_layer').removeClass('active');
alert("주소록 저장 목록 중 이모지를 사용할 수 없습니다.\n이모지 삭제후 발송해주세요.\n(" + usedEmoji + ")");
}
return returnFlag;
}
// 제목이 치환 문구 체크
function getSpacialStringChk(mmsSubject){
var returnStr = false;
if(mmsSubject.indexOf("[*이름*]") > -1 || mmsSubject.indexOf("[*1*]") > -1 || mmsSubject.indexOf("[*2*]") > -1 || mmsSubject.indexOf("[*3*]") > -1 || mmsSubject.indexOf("[*4*]") > -1){
returnStr = true;
}
return returnStr;
}
//커서 위치에 삽입
function setCursorInsertText(pTxtArea, pAddTxt) {
var txtArea = document.getElementById(pTxtArea);
var txtValue = txtArea.value;
var selectPos = txtArea.selectionStart; // 커서 위치 지정
var beforeTxt = txtValue.substring(0, selectPos); // 기존텍스트 ~ 커서시작점 까지의 문자
var afterTxt = txtValue.substring(txtArea.selectionEnd, txtValue.length); // 커서끝지점 ~ 기존텍스트 까지의 문자
var addTxt = pAddTxt; // 추가 입력 할 텍스트
txtArea.value = beforeTxt + addTxt + afterTxt;
selectPos = selectPos + addTxt.length;
txtArea.selectionStart = selectPos; // 커서 시작점을 추가 삽입된 텍스트 이후로 지정
txtArea.selectionEnd = selectPos; // 커서 끝지점을 추가 삽입된 텍스트 이후로 지정
txtArea.focus();
}