JavaScript
半角全角文字判定2015/07/01
JavaScriptで文字が半角なのか全角なのか判定を行う関数を作ってみた。
【仕様】
第一引数は文字、第二引数は半角か判定する場合は真、全角か判定する場合は偽
返り値は第一引数の文字コードと第二引数のフラグが一致した場合は真、不一致の場合は偽
こちらのページを参考にとりあえず1文字版を作成。
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文は文字列に対応するためのものであるため除去。
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であることに着目。
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への代入式が長いため分割して演算。
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をそのまま返すように変更。
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が表示される。
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())); } ); });