ホームページ  >  記事  >  ウェブフロントエンド  >  js処理には中国語の文字列の共有例が含まれています

js処理には中国語の文字列の共有例が含まれています

小云云
小云云オリジナル
2018-01-25 11:35:322015ブラウズ

この記事では主に漢字を含む文字列をjsで処理する例を紹介します。編集者はこれがとても良いものだと思ったので、皆さんの参考として今から共有します。編集者をフォローして見てみましょう。皆さんのお役に立てれば幸いです。

シナリオ:

js の String 型に付属する属性の長さは文字列内の文字数を取得しますが、フロントエンドは多くの場合、文字列の表示長を制限する必要があります。小文字の表示位置は英語 2 文字程度であるため、中国語と英語が混在している場合、長さの値を使用して表示長を判断するのは誤りであることがよくあります。

従来の解決策は、文字列をトラバースすることであり、中国語の文字は長さ 2 としてカウントされ、中国語以外の文字は長さ 1 としてカウントされ、文字列の表示長は新しく計算された長さの合計によって制限されます。コードを見てください ↓↓↓


var Tools ={
 //是否包含中文
 hasZh: function(str){
  for(var i = 0;i < str.length; i++)
  {
   if(str.charCodeAt(i) > 255) //如果是汉字,则字符串长度加2
    return true;
   return false;
  }
 },
 //重新计算长度,中文+2,英文+1
 getlen: function(str){
  var strlen = 0;
  for(var i = 0;i < str.length; i++)
  {
   if(str.charCodeAt(i) > 255) //如果是汉字,则字符串长度加2
    strlen += 2;
   else
    strlen++;
  }
  return strlen;
 },
 //限制长度
 limitlen: function(str, len){
  var result = "";
  var strlen = 0;
  for(var i = 0;i < str.length; i++)
  {
   if(str.charCodeAt(i) > 255) //如果是汉字,则字符串长度加2
    strlen += 2;
   else
    strlen++;

   result += str.substr(i,1);

   if(strlen >= len){
    break;
   }
  }
  return result;
 }
}

このメソッドの原理は、中国語と英語の異なる Unicode エンコード範囲に基づいており、中国語は 2 バイトを占め、英語は 1 バイトを占めるため、中国語の Unicode エンコード値は間違いなく大きくなります。 2^8-1=255より。

上記の方法はより厳密にすることができます: Unicode エンコード範囲を考慮してください。具体的な範囲は Unicode テーブルで確認できます

追記: 中国語文字の Unicode エンコード範囲は 16 進数で 4E00-9FA5 です。 10 進数で 4E00-9FA5 : 19968-40869、つまり、中国語を判断するための正確な表現は次のとおりです。


str.charCodeAt(i)>=19968 && str.charCodeAt(i)<=40869

コードは厳密すぎる必要はありません。ユーザー (テスト) がどんな奇妙なものを失うかわかりません。

関連する推奨事項:

すべての jQuery 文字列置換を実装する方法

Vue 構文の文字列スプライシングの詳細な説明

js インターセプト文字列関数を実装する方法

以上がjs処理には中国語の文字列の共有例が含まれていますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。