textbox 글자 제한 maxlength 영문 한글 질문좀... 정보
textbox 글자 제한 maxlength 영문 한글 질문좀...본문
textbox에 글자제한을 maxlength 두었는데 한글과 영문 모두 1나의 길이로 보게 되서 byte로 계산하는 함수를 넣어봤습니다...
문제는 아래처럼 하니까 alert창이 뜨면서 7자 까지는 입력이 되서요...
어떤 해결 방법이 있을까요?
많은 조언 부탁드립니다....^ ^
################<소스>#####################
function chk(lim){ //바이트 제한 숫자를 매개변수로 받음
f=document.regist; //폼객체
v=f.nickname.value; //입력값
re0=/[a-z]|[0-9]/gi; //영숫자 패턴
re1=/[ㄱ-힣]/g; //한글패턴
v0=v.match(re0); //매치확인
v1=v.match(re1); //매치확인
if(v0!=null)v0=v0.length; //바이트 구함
if(v1!=null)v1=v1.length; //바이트 구함
tot=v0+(v1*2); //합을 구함
if(tot<=lim){ //한계수치이내인경우 바이트표시
} else { //한계를 초과하면 경고문 출력
alert('한글은 6자 영문은 12자까지 가능합니다.');
v=f.nickname.value -1;
f.nickname.select(); //입력값을 선택
}
}
인풋부분
<td bgcolor='#FFF9F7'><span class='txt_b'>회원 별명</span></td>
<td><input name='nickname' type='text' class='text02' size='20' maxlength=12 onKeyDown='nick_check_clear()' onkeyup=chk(12)>
문제는 아래처럼 하니까 alert창이 뜨면서 7자 까지는 입력이 되서요...
어떤 해결 방법이 있을까요?
많은 조언 부탁드립니다....^ ^
################<소스>#####################
function chk(lim){ //바이트 제한 숫자를 매개변수로 받음
f=document.regist; //폼객체
v=f.nickname.value; //입력값
re0=/[a-z]|[0-9]/gi; //영숫자 패턴
re1=/[ㄱ-힣]/g; //한글패턴
v0=v.match(re0); //매치확인
v1=v.match(re1); //매치확인
if(v0!=null)v0=v0.length; //바이트 구함
if(v1!=null)v1=v1.length; //바이트 구함
tot=v0+(v1*2); //합을 구함
if(tot<=lim){ //한계수치이내인경우 바이트표시
} else { //한계를 초과하면 경고문 출력
alert('한글은 6자 영문은 12자까지 가능합니다.');
v=f.nickname.value -1;
f.nickname.select(); //입력값을 선택
}
}
인풋부분
<td bgcolor='#FFF9F7'><span class='txt_b'>회원 별명</span></td>
<td><input name='nickname' type='text' class='text02' size='20' maxlength=12 onKeyDown='nick_check_clear()' onkeyup=chk(12)>
댓글 전체
글자가 입력되고 난 후 체크하게 되니 원하는 글자수보다 한자 많게 되죠
아래처럼 -1 해주면 원하는 답 아닌가요?
if(tot >lim -1 ){ //한계수치이내인경우 바이트표시
alert('한글은 6자 영문은 12자까지 가능합니다.');
v=f.nickname.value -1;
f.nickname.select(); //입력값을 선택
}
아래처럼 -1 해주면 원하는 답 아닌가요?
if(tot >lim -1 ){ //한계수치이내인경우 바이트표시
alert('한글은 6자 영문은 12자까지 가능합니다.');
v=f.nickname.value -1;
f.nickname.select(); //입력값을 선택
}
감사합니다...^ ^
그렇게 했더니 6자에서 얼렛창이 뜹니다...
그런데 다른 문제가 생기네요...
만약 "대한민국대한" 이라는 글자를 입력하면...
"대한민국대ㅎ" 에서 경고창이 떠버리네요...
좋은 방법이 없을까요...ㅜ_ㅜ
만약 경고창이 뜨고 난후 12byte 이후를 잘라버는 방법은 없을까요?
그렇게 했더니 6자에서 얼렛창이 뜹니다...
그런데 다른 문제가 생기네요...
만약 "대한민국대한" 이라는 글자를 입력하면...
"대한민국대ㅎ" 에서 경고창이 떠버리네요...
좋은 방법이 없을까요...ㅜ_ㅜ
만약 경고창이 뜨고 난후 12byte 이후를 잘라버는 방법은 없을까요?

이걸 사용해 보세요...
//최대길이
//input object:객체 , iMax : 최대길이
function calBytes(object,iMax)
{
var iCount = 0; // 길이
var sVal = new String(object.value); //값
var iLen = sVal.length; //현재 길이
var oChar;
for ( i=0; i<iLen; i++ )
{
oChar = sVal.charAt(i);
if (escape(oChar).length > 4)
{
iCount += 2;
} else{
iCount += 1;
}
}
if (iCount>iMax){ //최대 길이 비교
alert("최대길이를 초과 하였습니다.!");
object.value=sVal.substring(0,iLen-1)
object.focus();
}
}
사용 형식
:
<input type="text" class="text_wl" name="txt_EmployeeNO" MAXLENGTH=10 tabindex=12 onkeydown="calBytes(this,10)" value="">
//최대길이
//input object:객체 , iMax : 최대길이
function calBytes(object,iMax)
{
var iCount = 0; // 길이
var sVal = new String(object.value); //값
var iLen = sVal.length; //현재 길이
var oChar;
for ( i=0; i<iLen; i++ )
{
oChar = sVal.charAt(i);
if (escape(oChar).length > 4)
{
iCount += 2;
} else{
iCount += 1;
}
}
if (iCount>iMax){ //최대 길이 비교
alert("최대길이를 초과 하였습니다.!");
object.value=sVal.substring(0,iLen-1)
object.focus();
}
}
사용 형식
:
<input type="text" class="text_wl" name="txt_EmployeeNO" MAXLENGTH=10 tabindex=12 onkeydown="calBytes(this,10)" value="">
감사합니다...^ ^
조언 감사드립니다...
조언 감사드립니다...