Idea to Code

アイデアをコードへ
独学でプログラミング関係にいろいろ手を出すサイト

hawk

JavaScript

半角全角文字判定2015/07/01

JavaScriptで文字が半角なのか全角なのか判定を行う関数を作ってみた。


【仕様】

第一引数は文字、第二引数は半角か判定する場合は真、全角か判定する場合は偽

返り値は第一引数の文字コードと第二引数のフラグが一致した場合は真、不一致の場合は偽


こちらのページを参考にとりあえず1文字版を作成。

charHanOrZen1.js
function charHanOrZen(c, flag){
  var code = c.charCodeAt(0);
  if ( (code >= 0x0 && code < 0x81) || (code == 0xf8f0) || (code >= 0xff61 && code < 0xffa0) || (code >= 0xf8f1 && code < 0xf8f4)) {
    if(!flag) return true;
  } else {
    if(flag) return true;
  }
  return false;
}

2階層目のif文は文字列に対応するためのものであるため除去。

charHanOrZen2.js
function charHanOrZen(c, flag){
  var code = c.charCodeAt(0);
  if ( (code >= 0x0 && code < 0x81) || (code == 0xf8f0) || (code >= 0xff61 && code < 0xffa0) || (code >= 0xf8f1 && code < 0xf8f4)) {
    return flag;
  }
  return !flag;
}

返り値が文字コードの判定と、半角・全角のフラグのEXNORであることに着目。

charHanOrZen3.js
function charHanOrZen(c, flag){
  var code = c.charCodeAt(0);
  var f = (code >= 0x0 && code < 0x81) || (code == 0xf8f0) || (code >= 0xff61 && code < 0xffa0) || (code >= 0xf8f1 && code < 0xf8f4);
  return !(f ^ flag);
}

変数fへの代入式が長いため分割して演算。

charHanOrZen4.js
function charHanOrZen(c, flag){
  var code = c.charCodeAt(0);
  var f;
  
  f  = (code >= 0x0 && code < 0x81);
  f |= (code == 0xf8f0);
  f |= (code >= 0xff61 && code < 0xffa0);
  f |= (code >= 0xf8f1 && code < 0xf8f4);
  
  return !(f ^ flag);
}

そもそも1文字だけなら第二引数はあまり意味がないことに気づく。

変数fをそのまま返すように変更。

isHan1.js
function isHan(c){
  var code = c.charCodeAt(0);
  var f;
  
  f  = (code >= 0x0 && code < 0x81);
  f |= (code == 0xf8f0);
  f |= (code >= 0xff61 && code < 0xffa0);
  f |= (code >= 0xf8f1 && code < 0xf8f4);
  
  return f;
}

返り値がブーリアン値になるように変更し完成。


テスト用のtest.jsを作成。テストボタンを押すとテキストボックスの1文字目を判定する。

文字が半角ならtrue、全角ならfalseが表示される。

  
isHan2.js
function isHan(c){
  var code = c.charCodeAt(0);
  var f;
  
  f  = (code >= 0x0 && code < 0x81);
  f |= (code == 0xf8f0);
  f |= (code >= 0xff61 && code < 0xffa0);
  f |= (code >= 0xf8f1 && code < 0xf8f4);
  
  return !!f;
}
test.js
$(function(){
  $("#test").click(
    function(){
      $("#result").text(isHan($("#char").val()));
    }
  );
});