[개발] 프로그램 지식

[자바스크립트] 엔터[개행], 한글, 영문 등 바이트 체크 ( byte check )

  • -
반응형

JSP단에서 입력 후 DB에 인서트 되는 과정에서

JSP에서 일반적으로 한글은 2byte 그외는 1byte로 판단한다고 하네요

하지만 DB에 인서트 될떄에는 일반적으로 오라클 기준으로는

한글 3byte 엔터(개행) 시 2byte 그외 1byte로 들어가는 것 같습니다.

개인적으로 엔터(개행) 시 2byte때문에 애먹었습니당 ..ㅠ

혹시 저와 같은 분이 있을까해서 정리해서 글 남깁니다~!

 

//글자수 체크
	function textByteChk(message, msgLimit, msgTarget){
		var limitByte = Number(msgLimit);
		var totalByte = 0;
		var messageVal = $("#"+ message).val();
		
		for(var i =0; i < messageVal.length; i++) {
			var ch = escape(messageVal.charAt(i));
			if(ch.length == 1) totalByte++; // 영문 (db : 1byte)
			else if(escape(messageVal.charAt(i))=='%0A') totalByte += 2; // 엔터2바이트(개행 먼저 체크) (db : 2byte)
			else if(ch.indexOf("%u") != -1) totalByte += 3; // 한글 3바이트 ( db : 3byte )
			else if(ch.indexOf("%") != -1) totalByte += ch.length/3; // 개행, 공백 ( db : 1byte)
		}
		$('.'+ msgTarget).text(totalByte);
		// 입력된 바이트 수가 limitByet를 초과 할 경우 경고창 
		if(totalByte > limitByte) {
			alert(limitByte+" 바이트까지 입력 가능합니다.");
			var bytes = 0;
			for(var j=0; j < messageVal.length; j++) {
				var ch = escape(messageVal.charAt(j));
				if(ch.length == 1) bytes++; // 영문
			 else if(escape(messageVal.charAt(j))=='%0A') bytes += 2; // 엔터 2바이트(개행 먼저 체크)
			else if(ch.indexOf("%u") != -1) bytes += 3; // 한글 3바이트
			else if(ch.indexOf("%") != -1) bytes += ch.length/3; // 개행, 공백
			if(bytes > limitByte){
				$("#"+ message).val(messageVal.substring(0,j));
				break;
				//$('.'+ msgTarget).text(bytes);
			}
			$('.'+ msgTarget).text(bytes);
			}
		}
	}

//글자수 체크
function textByteChk(message, msgLimit, msgTarget){

// message : html 아이디값 msgLimit : 바이트 제한 수 msgTarget : 변화하는 바이트 수

var limitByte = Number(msgLimit); // 바이트 제한 
var totalByte = 0; // 전체 바이트 수
var messageVal = $("#"+ message).val(); // id값이 message인 태그의 값 가져옴

for(var i =0; i < messageVal.length; i++) { // for문을 통해 입력된 값만큼의 길이만큼 돌게 됨
var ch = escape(messageVal.charAt(i)); // 한글자씩 판단 , escape 인코딩함수 찾아보세용
if(ch.length == 1) totalByte++; // 영문 (db : 1byte)
else if(escape(messageVal.charAt(i))=='%0A') totalByte += 2; // 엔터2바이트(개행 먼저 체크) (db : 2byte) << 핵심!!
else if(ch.indexOf("%u") != -1) totalByte += 3; // 한글 3바이트 ( db : 3byte )
else if(ch.indexOf("%") != -1) totalByte += ch.length/3; // 개행, 공백 ( db : 1byte)
}
$('.'+ msgTarget).text(totalByte);


// 입력된 바이트 수가 limitByet를 초과 할 경우 경고창 
if(totalByte > limitByte) { // 제한된 바이트 수를 넘어가는 경우
alert(limitByte+" 바이트까지 입력 가능합니다.");
var bytes = 0;
for(var j=0; j < messageVal.length; j++) {
var ch = escape(messageVal.charAt(j));
if(ch.length == 1) bytes++; // 영문
 else if(escape(messageVal.charAt(j))=='%0A') bytes += 2; // 엔터 2바이트(개행 먼저 체크)
else if(ch.indexOf("%u") != -1) bytes += 3; // 한글 3바이트
else if(ch.indexOf("%") != -1) bytes += ch.length/3; // 개행, 공백
if(bytes > limitByte){
$("#"+ message).val(messageVal.substring(0,j));
break;
//$('.'+ msgTarget).text(bytes);
}
$('.'+ msgTarget).text(bytes);
}
}
}

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.