jquery JavaScript で文字列が英語かどうかを判定する

2013年12月13日

取得した文字列が英語か日本語か判定する必要があったので調べたメモ。

charCodeAt()

string.charCodeAt(n)
特定の場所の文字エンコーディングを返す
引数 n:エンコーディングが返される文字のインデックス
戻り値:string 内の n 番目の文字の Unicode エンコーディング(0 から 65535 までの 16 ビットの整数)。

使用例

var text = "abc. #}";
  for(var i = 0; i < text.length; i++) {
    console.log(text.charCodeAt(i));
  }
&#91;/code&#93;
コンソールの出力結果
<div class="box_w">
97
98
99
46
32
35
125    
</div>

何らかのテキスト(以下の例では「title」)を取得して、それが英語かどうかを判定する例。

charCodeAt(i) の戻り値が 256 以上の場合「英語ではない」と判定している。

この例では「英語」か「日本語」かを判定したいので「日本語=英語以外」として判定。

var isJapanese = false; //日本語(英語以外)の場合「true」に設定 for(var i=0; i < title.length; i++){ if(title.charCodeAt(i) >= 256) { isJapanese = true; break; } } //表示する文字数の調整 if(isJapanese) { //日本語(英語以外)の場合 if(title.length > 20) { title = title.substr(0,10) + '~'; } } else { //英語の場合 if(title.length > 32) { title = title.substr(0,28) + '...'; } } ......

fromCharCode()

逆に Unicode エンコーディングから文字列を作成するには、String.fromCharCode()を使う。

String.fromCharCode(c1, c2, ...)
引数 c1, c2, ...:生成する文字列の文字の Unicode エンコーディングを表す 0 以上の整数
戻り値:指定の文字を含む新しい文字列
fromCharCode() は、String() コンストラクタのプロパティで、文字列や String オブジェクトのメソッドではない。
var test = String.fromCharCode(128, 129, 130, 131, 132, 159, 160, 161, 162, 163, 164, 165, 167, 168, 253, 254, 255, 256, 257)
  console.log(test);

コンソールの出力結果

¡¢£¤¥§¨ýþÿĀā

128から159までは何も出力されず、160(おそらく何らかのスペース)以降の文字が出力されている。

160:
161:¡
162:¢
163:£
164:¤
165:¥
167:§
168:¨
253:ý
254:þ
255:ÿ
256:Ā
257:ā