Heim >Web-Frontend >js-Tutorial >JavaScript-Funktionscode zur Bestimmung der Länge chinesischer Schriftzeichen

JavaScript-Funktionscode zur Bestimmung der Länge chinesischer Schriftzeichen

高洛峰
高洛峰Original
2017-01-20 09:24:301347Durchsuche

JS-Strings sind alle String-Objekte. Sie können das Längenattribut des String-Objekts verwenden, um seine Länge zu ermitteln. Die Mindestlängeneinheit für Chinesisch, Symbole voller Breite und Englisch ist jedoch 1, was sich von PHPs strlen unterscheidet. ).

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; 
}

Erfassen Sie jedes Zeichen in voller Breite und chinesische Zeichen, die als 2 Zeichen gezählt werden, und andere als 1 Zeichen.

<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>

Das Ergebnis, das Sie erhalten, ist: 5 Die Länge der Bytes, die Sie erhalten möchten, oder? Bitte beachten Sie den Unterschied in Bytes und Zeichen. Die Bytelänge hängt von der Kodierung ab. Bei „China a“ beträgt die gbk/gb2312-Kodierung beispielsweise 5 Byte, bei UTF-8 sind es jedoch 7 Byte (normalerweise 3 chinesische Zeichen unter UTF-8-Byte).
Wir können alle Zeichen in GBK konvertieren und dann ausführen.

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; 
}

So lösen Sie dieses Problem. In diesem Artikel wird die Methode zur Verwendung von js vorgestellt, um die Länge chinesischer Zeichen zu ermitteln >Zuerst definieren wir eine Die neue Funktion getBytes() ruft die Anzahl der Bytes in einem String ab. In JavaScript ist diese Funktion eine Standardfunktion.

GetBytes verwendet reguläre Ausdrücke, um die Anzahl der in der Zeichenfolge enthaltenen chinesischen Zeichen zu ermitteln. Die enthaltenen chinesischen Zeichen werden im Array cArr platziert, sodass die Länge von cArr der Gesamtzahl der chinesischen Zeichen entspricht. Die getBytes-Methode gibt die Länge plus die Anzahl der chinesischen Zeichen zurück, was der Gesamtzahl der Bytes entspricht.
  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; 
  }
Verwenden Sie einfach [^x00-xff], was etwas ekelhaft ist. Einige Sonderzeichen können ebenfalls abgeglichen werden, z. B. } usw.

Aber wenn Sie [^u4E00-u9FA5] verwenden, können Sie kein Chinesisch finden...

Die folgenden sind mehrere andere Methoden, die Sie testen können:
Eine:

Zwei Typen:
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; 
}

Weitere Javascript-Funktionscodes zur Bestimmung der Länge von Artikeln zu chinesischen Schriftzeichen finden Sie auf der chinesischen PHP-Website!
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个汉字。
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:JavaScript-DekoratormusterNächster Artikel:JavaScript-Dekoratormuster