シナリオ:
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 進数では次のようになります。 19968-40869、つまり、中国語を判断するための正確な表現は次のとおりです。
str.charCodeAt(i)>=19968 && str.charCodeAt(i)<=40869
厳密すぎない単語を挿入してください。 結局のところ、コードはユーザーにとって何が変なのかわかりません。テスト)負けます。
以上がjsは中国語の文字を含む文字列を処理しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。