Maison > interface Web > js tutoriel > le corps du texte

Code de fonction JavaScript pour déterminer la longueur des caractères chinois

高洛峰
Libérer: 2017-01-20 09:24:30
original
1323 Les gens l'ont consulté

Les chaînes JS sont toutes des objets chaîne. Vous pouvez utiliser l'attribut length de l'objet chaîne pour obtenir sa longueur. Cependant, l'unité de longueur minimale pour le chinois, les symboles pleine largeur et l'anglais est 1, ce qui est différent du strlen( de PHP. ).

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; 
}
Copier après la connexion

Capturez chaque caractère. Les caractères pleine chasse correspondants et les caractères chinois compteront pour 2 caractères, et les autres compteront pour 1 caractère.

<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>
Copier après la connexion

Le résultat que vous obtiendrez est : 5 La longueur d'octets que vous souhaitez obtenir, n'est-ce pas ? Veuillez noter la différence entre les octets et les caractères. La longueur des octets est liée à l'encodage. Par exemple, "China a", l'encodage gbk/gb2312 est de 5 octets, mais s'il s'agit d'UTF-8, il est de 7 octets (généralement 3 caractères chinois sous UTF-8 octets).
Nous pouvons convertir tous les caractères en gbk puis opérer. Exemple

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; 
}
Copier après la connexion

Comment résoudre ce problème : cet article présente la méthode d'utilisation de js pour obtenir la longueur des caractères chinois
<🎜. >Tout d'abord, nous définissons une La nouvelle fonction getBytes() récupère le nombre d'octets dans une chaîne En JavaScript, cette fonction est une fonction standard.

  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; 
  }
Copier après la connexion
GetBytes utilise des expressions régulières pour déterminer le nombre de caractères chinois contenus dans la chaîne. Les caractères chinois contenus sont placés dans le tableau cArr, de sorte que la longueur de cArr soit le nombre total de caractères chinois. La méthode getBytes renvoie la longueur plus le nombre de caractères chinois, qui correspond au nombre total d'octets.

Utilisez simplement [^x00-xff], ce qui est un peu dégoûtant. Certains caractères spéciaux peuvent également être mis en correspondance, comme } et ainsi de suite.
Mais si vous utilisez [^u4E00-u9FA5], vous ne pouvez pas faire correspondre le chinois...

Voici plusieurs autres méthodes que vous pouvez tester :
Une :

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; 
}
Copier après la connexion
Deux types :

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个汉字。
Copier après la connexion
Pour plus de code de fonction javascript permettant de déterminer la longueur des articles liés aux caractères chinois, veuillez faire attention au site Web PHP chinois !

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!