diff --git a/src/main/java/itn/let/mjo/addr/web/AddrController.java b/src/main/java/itn/let/mjo/addr/web/AddrController.java index 5e42a7e9..1d24a7ec 100644 --- a/src/main/java/itn/let/mjo/addr/web/AddrController.java +++ b/src/main/java/itn/let/mjo/addr/web/AddrController.java @@ -1663,6 +1663,7 @@ public class AddrController { //String phoneRegExp = "^01(?:0|1|[6-9])[.-]?(\\d{3}|\\d{4})[.-]?(\\d{4})$"; String phoneRegExp = "^(050[234567]{1}|01[016789]{1})-?[0-9]{3,4}-?[0-9]{4}$"; + String charset = "euc-kr"; boolean isSuccess = true; String msg = ""; int resultCnt = 0; @@ -1734,14 +1735,14 @@ public class AddrController { tempAddrVO.setAddrNm(null); }else { String tmpNm = addrVO.getNameList()[i].trim().replaceAll("§", ","); - int nmLen = tmpNm.length(); + int nmLen = tmpNm.getBytes(charset).length; - if(nmLen > 12) { + if(nmLen >= 20) { //isSuccess = false; //msg = "이름 항목의 내용(\" " + tmpNm + " \")이 길이를 초과하여 입력되었습니다. 12글자 이하로 입력해 주세요."; //break; - tempAddrVO.setAddrNm(addrVO.getNameList()[i].trim().replaceAll("§", ",").substring(0, 12)); + tempAddrVO.setAddrNm(subStringBytes(addrVO.getNameList()[i].replaceAll("§", ","), 20, 2)); }else { tempAddrVO.setAddrNm(addrVO.getNameList()[i].trim().replaceAll("§", ",")); } @@ -1769,14 +1770,13 @@ public class AddrController { }else { String tmpInfo1 = addrVO.getInfo1List()[i].replaceAll("§", ","); - int info1Len = tmpInfo1.length(); + int info1Len = tmpInfo1.getBytes(charset).length; - if(info1Len > 20) { + if(info1Len >= 40) { //isSuccess = false; //msg = "[*1*] 항목의 내용(\" " + tmpInfo1 + " \")이 길이를 초과하여 입력되었습니다. 20글자 이하로 입력해 주세요."; //break; - - tempAddrVO.setAddrInfo1(addrVO.getInfo1List()[i].replaceAll("§", ",").substring(0, 20)); + tempAddrVO.setAddrInfo1(subStringBytes(addrVO.getInfo1List()[i].replaceAll("§", ","), 40, 2)); }else { tempAddrVO.setAddrInfo1(addrVO.getInfo1List()[i].replaceAll("§", ",")); } @@ -1791,14 +1791,14 @@ public class AddrController { tempAddrVO.setAddrInfo2(null); }else { String tmpInfo2 = addrVO.getInfo2List()[i].replaceAll("§", ","); - int info2Len = tmpInfo2.length(); + int info2Len = tmpInfo2.getBytes(charset).length; - if(info2Len > 20) { + if(info2Len >= 40) { //isSuccess = false; //msg = "[*2*] 항목의 내용(\" " + tmpInfo2 + " \")이 길이를 초과하여 입력되었습니다. 20글자 이하로 입력해 주세요."; //break; - tempAddrVO.setAddrInfo2(addrVO.getInfo2List()[i].replaceAll("§", ",").substring(0, 20)); + tempAddrVO.setAddrInfo2(subStringBytes(addrVO.getInfo2List()[i].replaceAll("§", ","), 40, 2)); }else { tempAddrVO.setAddrInfo2(addrVO.getInfo2List()[i].replaceAll("§", ",")); } @@ -1814,14 +1814,14 @@ public class AddrController { tempAddrVO.setAddrInfo3(null); }else { String tmpInfo3 = addrVO.getInfo3List()[i].replaceAll("§", ","); - int info3Len = tmpInfo3.length(); + int info3Len = tmpInfo3.getBytes(charset).length; - if(info3Len > 20) { + if(info3Len >= 40) { //isSuccess = false; //msg = "[*3*] 항목의 내용(\" " + tmpInfo3 + " \")이 길이를 초과하여 입력되었습니다. 20글자 이하로 입력해 주세요."; //break; - tempAddrVO.setAddrInfo3(addrVO.getInfo3List()[i].replaceAll("§", ",").substring(0, 20)); + tempAddrVO.setAddrInfo3(subStringBytes(addrVO.getInfo3List()[i].replaceAll("§", ","), 40, 2)); }else { tempAddrVO.setAddrInfo3(addrVO.getInfo3List()[i].replaceAll("§", ",")); } @@ -1836,14 +1836,14 @@ public class AddrController { tempAddrVO.setAddrInfo4(null); }else { String tmpInfo4 = addrVO.getInfo4List()[i].replaceAll("§", ","); - int info4Len = tmpInfo4.length(); + int info4Len = tmpInfo4.getBytes(charset).length; - if(info4Len > 20) { + if(info4Len >= 40) { //isSuccess = false; //msg = "[*4*] 항목의 내용(\" " + tmpInfo4 + " \")이 길이를 초과하여 입력되었습니다. 20글자 이하로 입력해 주세요."; //break; - tempAddrVO.setAddrInfo4(addrVO.getInfo4List()[i].replaceAll("§", ",").substring(0, 20)); + tempAddrVO.setAddrInfo4(subStringBytes(addrVO.getInfo4List()[i].replaceAll("§", ","), 40, 2)); }else { tempAddrVO.setAddrInfo4(addrVO.getInfo4List()[i].replaceAll("§", ",")); } @@ -1858,14 +1858,14 @@ public class AddrController { tempAddrVO.setAddrComment(null); }else { String tmpComment = addrVO.getMemoList()[i].replaceAll("§", ","); - int commLen = tmpComment.length(); + int commLen = tmpComment.getBytes(charset).length; - if(commLen > 125) { + if(commLen >= 200) { //isSuccess = false; //msg = "메모 항목의 내용(\" " + tmpComment + " \")이 길이를 초과하여 입력되었습니다. 100글자 이하로 입력해 주세요."; //break; - tempAddrVO.setAddrComment(addrVO.getMemoList()[i].replaceAll("§", ",").substring(0, 125)); + tempAddrVO.setAddrComment(subStringBytes(addrVO.getMemoList()[i].replaceAll("§", ","), 200, 2)); }else { tempAddrVO.setAddrComment(addrVO.getMemoList()[i].replaceAll("§", ",")); } @@ -1952,6 +1952,41 @@ public class AddrController { return modelAndView; } + /* 바이트 자르기 + UTF-8일 경우 + subStringBytes("블라블라블라라", 10, 3); + EUC-KR일 경우 + subStringBytes("블라블라블라라", 10, 2); + */ + public String subStringBytes(String str, int byteLength, int sizePerLetter) { + int retLength = 0; + int tempSize = 0; + int asc; + if (str == null || "".equals(str) || "null".equals(str)) { + str = ""; + } + + int length = str.length(); + + for (int i = 1; i <= length; i++) { + asc = (int) str.charAt(i - 1); + if (asc > 127) { + if (byteLength >= tempSize + sizePerLetter) { + tempSize += sizePerLetter; + retLength++; + } + } else { + if (byteLength > tempSize) { + tempSize++; + retLength++; + } + } + } + + return str.substring(0, retLength); + } + + /** * 주소록 그룹 목록