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()));
}
);
});