同僚が会社の OA に投稿し、JavaScript で中国語と英語が混在する文字列の長さを取得する方法を紹介しました。
は正規表現を使用します。
var str = "tank は、tank の音訳です。タンク";
var len = str.match(/[^ -~]/g) == null ? str.length : str.length str.match(/[^ -~]/g).length ;
本を調べて少し理解しました:
一般的に使用される欧文文字セットは、スペース " " (0x20) から "~" (0x7e) で構成されます。正規表現 [^ -~] は、スペースから "~" までを除く文字セットを表します。
string.match(regex) は文字を返します。配列の形式で文字列は正規表現 regex の部分文字列と一致します。 したがって、
str.match(/[^ -~]/g) は配列の形式で中国語の文字を 1 つずつ返します。例:
var str = "dd Brother";
//「兄」を表示し、配列内の 2 つの漢字を返します。配列の長さは 2 です。
alert(str.match(/[^ - ~] /g));
このように、 var len = str.match(/[^ -~]/g) == null : str.length str.match (/[^ -~]/g).length ;str の正しい長さを取得できます。
JavaScript では漢字の長さも 1 として計算され、データベースに送信するときに標準の長さを超えるエラーが発生することがよくありますが、この方法を使用すると、送信前に確認できるようになります。
注: 上記のコード内の一部のシンボルには問題があるため、修正後、次の関数に変更されました。
function get_strlength (str)
{
var len = 0;
if (str.match(/[^ -~]/g) == null)
{
len = str.length>}
else
{
len = str.length str.match(/[^ -~]/g).length;
}
return
}