>  기사  >  웹 프론트엔드  >  한자의 길이를 결정하는 JavaScript 함수 코드

한자의 길이를 결정하는 JavaScript 함수 코드

高洛峰
高洛峰원래의
2017-01-20 09:24:301287검색

JS 문자열은 모두 문자열 객체입니다. 문자열 객체의 길이 속성을 사용하여 길이를 얻을 수 있습니다. 그러나 중국어, 전각 기호 및 영어의 최소 길이 단위는 1이며 이는 PHP의 strlen( ).

function strlen(str) { 
var s = 0; 
for(var i = 0; i < str.length; i++) { 
if(str.charAt(i).match(/[u0391-uFFE5]/)) { 
s += 2; 
} else { 
s++; 
} 
} 
return s; 
}

각 문자를 캡처합니다. 전자와 한자가 일치하면 2자로 계산되고, 다른 문자와 일치하면 1자로 계산됩니다.

<script> 
alert (fucCheckLength("中国a")); 
function fucCheckLength(strTemp) 
{ 
var i,sum; 
sum=0; 
for(i=0;i<strTemp.length;i++) 
{ 
if ((strTemp.charCodeAt(i)>=0) && (strTemp.charCodeAt(i)<=255)) 
sum=sum+1; 
else 
sum=sum+2; 
} 
return sum; 
} 
</script>

는 다음과 같은 결과를 얻습니다. 5. 얻고자 하는 바이트 길이 맞죠? 바이트와 ​​문자의 차이에 유의하세요. 바이트 길이는 인코딩과 관련이 있습니다. 예를 들어 "China a", gbk/gb2312 인코딩은 5바이트이지만 UTF-8인 경우 7바이트(UTF-8 바이트 아래에는 일반적으로 한자 3자)입니다.
gbk의 모든 문자를 변환한 후 연산할 수 있습니다. 예시

function Utf8ToUnicode(strUtf8) 
{ 
var bstr = ""; 
var nTotalChars = strUtf8.length; // total chars to be processed. 
var nOffset = 0; // processing point on strUtf8 
var nRemainingBytes = nTotalChars; // how many bytes left to be converted 
var nOutputPosition = 0; 
var iCode, iCode1, iCode2; // the value of the unicode. 
while (nOffset < nTotalChars) 
{ 
iCode = strUtf8.charCodeAt(nOffset); 
if ((iCode & 0x80) == 0) // 1 byte. 
{ 
if ( nRemainingBytes < 1 ) // not enough data 
break; 
bstr += String.fromCharCode(iCode & 0x7F); 
nOffset ++; 
nRemainingBytes -= 1; 
} 
else if ((iCode & 0xE0) == 0xC0) // 2 bytes 
{ 
iCode1 = strUtf8.charCodeAt(nOffset + 1); 
if ( nRemainingBytes < 2 || // not enough data 
(iCode1 & 0xC0) != 0x80 ) // invalid pattern 
{ 
break; 
} 
bstr += String.fromCharCode(((iCode & 0x3F) << 6) | ( iCode1 & 0x3F)); 
nOffset += 2; 
nRemainingBytes -= 2; 
} 
else if ((iCode & 0xF0) == 0xE0) // 3 bytes 
{ 
iCode1 = strUtf8.charCodeAt(nOffset + 1); 
iCode2 = strUtf8.charCodeAt(nOffset + 2); 
if ( nRemainingBytes < 3 || // not enough data 
(iCode1 & 0xC0) != 0x80 || // invalid pattern 
(iCode2 & 0xC0) != 0x80 ) 
{ 
break; 
} 
bstr += String.fromCharCode(((iCode & 0x0F) << 12) | 
((iCode1 & 0x3F) << 6) | 
(iCode2 & 0x3F)); 
nOffset += 3; 
nRemainingBytes -= 3; 
} 
else // 4 or more bytes -- unsupported 
break; 
} 
if (nRemainingBytes != 0) 
{ 
// bad UTF8 string. 
return ""; 
} 
return bstr; 
}

이 문제를 해결하는 방법 이 기사에서는 js를 사용하여 한자의 길이를 구하는 방법을 소개합니다

, 우리는 새로운 getBytes() 함수를 정의하여 문자열의 바이트 수를 얻습니다. JavaScript에서 이 함수는 표준 함수입니다.

  String.prototype.getBytes = function() { 
  var cArr = this.match(/[^x00-xff]/ig); 
  return this.length + (cArr == null ? 0 : cArr.length); 
  } 
  function paramCheck(cur){ 
  if(cur.value.getBytes() > 64){ 
  alert("字符超过64个字符"); 
  return false; 
  } 
  return true; 
  }

 getBytes는 정규 표현식을 사용하여 문자열에 포함된 한자의 수를 결정합니다. 포함된 한자는 cArr 배열에 배치되므로 cArr의 길이는 총 한자의 수입니다. getBytes 메소드는 길이에 중국어 문자 수(총 바이트 수)를 더한 값을 반환합니다.
그냥 [^x00-xff]를 사용하세요. 이는 약간 역겹습니다. } 등과 같은 일부 특수 문자도 일치할 수 있습니다.
그러나 [^u4E00-u9FA5]를 사용하면 중국어를 일치시킬 수 없습니다...

다음은 테스트할 수 있는 몇 가지 다른 방법입니다.
하나:

function _length(str){ 
var len=0; 
for(var i=0;i<str.length;i++){ 
if(str.charAt(i)>&#39;~&#39;){len+=2;}else{len++;} 
} 
return len; 
}

두 가지 유형:

String.prototype.gblen = function() { 
var len = 0; 
for (var i=0; i<this.length; i++) { 
if (this.charCodeAt(i)>127 || this.charCodeAt(i)==94) { 
len += 2; 
} else { 
len ++; 
} 
} 
return len; 
} 
String.prototype.gbtrim = function(len, s) { 
var str = &#39;&#39;; 
var sp = s || &#39;&#39;; 
var len2 = 0; 
for (var i=0; i<this.length; i++) { 
if (this.charCodeAt(i)>127 || this.charCodeAt(i)==94) { 
len2 += 2; 
} else { 
len2 ++; 
} 
} 
if (len2 <= len) { 
return this; 
} 
len2 = 0; 
len = (len > sp.length) ? len-sp.length: len; 
for (var i=0; i<this.length; i++) { 
if (this.charCodeAt(i)>127 || this.charCodeAt(i)==94) { 
len2 += 2; 
} else { 
len2 ++; 
} 
if (len2 > len) { 
str += sp; 
break; 
} 
str += this.charAt(i); 
} 
return str; 
} 
var str1 = &#39;世上最牛的@#%&们 世上最牛的@#%&们&#39;; 
document.write(&#39;str1 = &#39;+ str1 +&#39; 
&#39;); 
document.write(&#39;length = &#39;+ str1.gblen() +&#39; 
&#39;); 
document.write(&#39;gbtrim(10) = &#39;+ str1.gbtrim(10) +&#39; 
&#39;); 
document.write(&#39;gbtrim(10, \&#39;…\&#39;) = &#39;+ str1.gbtrim(10, &#39;…&#39;) +&#39; 
&#39;); 
document.write(&#39;gbtrim(12, \&#39;-\&#39; ) = &#39;+ str1.gbtrim(12, &#39;-&#39;) +&#39; 
&#39;); 

// gbtrim(len 截取长度,按英文字节长度计算, s截取后的省略字符,如"…" ) 
// 备注: 这里中文字符都是当作两个长度来计算的,所以gbtrim中的len为10时,是显示最多5个汉字的。 
// 当汉字数大于5时,由于截取后加上“…”,所以只显示4个汉字。

한자의 길이를 결정하는 더 많은 자바스크립트 함수 코드를 보려면 PHP 중국어 웹사이트의 관련 기사에 주목하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.