より正確に言うと、特定の文字列に 2 バイト文字が含まれているかどうかを確認できるかどうか (可能であれば、その方法も) を知る必要があります。基本的に、ポップアップを開いて、中国語や日本語などの 2 バイト文字を含むテキストを表示する必要があります。この場合、ウィンドウ サイズを英語または ASCII の場合よりも調整する必要があります。誰にも手がかりがありますか?
6 に答える
これには mikesamuel の回答を使用しました。ただし、おそらくこの形式のせいでu
、たとえば、の前にエスケープスラッシュが1つだけある必要があり、これを正しく機能さ\u
せないことに気付きました。\\u
function containsNonLatinCodepoints(s) {
return /[^\u0000-\u00ff]/.test(s);
}
私のために働きます:)
JavaScript は、Unicode のかなり広範なサブセットをエンコードできる UCS-2 として内部的にテキストを保持します。
しかし、それはあなたの質問とはあまり関係ありません。解決策の 1 つは、文字列をループして各位置の文字コードを調べることです。
function isDoubleByte(str) {
for (var i = 0, n = str.length; i < n; i++) {
if (str.charCodeAt( i ) > 255) { return true; }
}
return false;
}
これは、あなたが望むほど速くないかもしれません。
実際、少なくとも Javascript エンジンの観点からは、すべての文字が Unicode です。
残念ながら、特定の Unicode 範囲内に文字が存在するだけでは、より多くのスペースが必要であると判断するには不十分です。ASCII 範囲をはるかに超える Unicode コードポイントを持つ他の文字とほぼ同じ量のスペースを占める文字がいくつかあります。活版印刷の引用符、分音記号付きの文字、特定の句読点記号、およびさまざまな通貨記号は、ASCII の下位範囲外にあり、Unicode 基本多言語面のまったく異なる場所に割り当てられます。
一般的に、私が取り組んできたプロジェクトでは、すべての言語に余分なスペースを提供するか、javascript を使用して、自動スクロールバー css 属性を持つウィンドウに実際にスクロールバーをトリガーする高さのコンテンツがあるかどうかを判断します。
CJK 文字の存在または数を検出するだけで、少し余分なスペースが必要であると判断できる場合は、[\u3300-\u9fff\uf900-\ufaff] の範囲を使用して正規表現を作成し、一致する文字数のカウントを抽出します。(これは少し粗すぎて、BMP 以外のすべてのケースを見逃しており、おそらく他の関連する範囲を除外しており、関連性のない文字をいくつか含んでいる可能性が高いですが、これは出発点です)。
繰り返しになりますが、フル テキスト レンダリング エンジンのラインに沿ったものを使用せずに大まかなヒューリスティックを管理することしかできません。実際に必要なのは、GDI の MeasureString (または他のテキスト レンダリング エンジンの同等物) のようなものだからです。私がそうしてからしばらく経ちましたが、最も近い HTML/DOM の同等物は div に幅を設定し、高さを要求することだと思います (切り取りと貼り付けの再利用なので、これにエラーが含まれている場合はお詫びします):
o = document.getElementById("test");
document.defaultView.getComputedStyle(o,"").getPropertyValue("height"))
ランタイムの高さ/幅に基づいてウィンドウのサイズを変更しないのはなぜですか?
ポップアップで次のように実行します。
window.resizeTo(document.body.clientWidth, document.body.clientHeight);