全角英数字を半角英数字に変換する方法
DOM のお勉強をしている最中に出てきたサンプルコード、全角英数字を半角英数字に変換する、というものの解法が面白かった。
Unicode の表を見てみると例えば全角の A は 0xFF21 で半角の A は 0x41 で、差分は 0xFEE0 となる。全角英数字と半角英数字の並びは同一なので、この値は B, C …とずっと一緒となる。
なので全角英数字を半角英数字にするためには 0xFEE0 を引けばいい。
参考:
Unicode一覧 F000-FFFF - Wikipedia
Unicode一覧 0000-0FFF - Wikipedia
書いてみたコードはこれ。body タグ以下のすべてのノードの全角英数字を半角英数字にしている。
function load(){ var body = document.getElementsByTagName("body")[0]; recursive(body); } function recursive(body){ for (var i = 0; i < body.childNodes.length; i ++){ var cNode = body.childNodes[i]; if(cNode.nodeType == 1){ // 要素ノード recursive(cNode); } else if(cNode.nodeType == 3){ // テキストノード cNode.nodeValue = convert(cNode); } } } function convert(cNode){ var num = cNode.nodeValue.length; var str = ""; var flag = false; for(var i = 0; i < num; i++){ var cha = cNode.nodeValue.charCodeAt(i); if(cha >= 0xFF10 && cha <= 0xFF19 || cha >=0xFF21 && cha <= 0xFF3A || cha >=0xFF41 && cha <= 0xFF5A){ // 変換処理 flag = true; cha -= 0xFEE0; } str += String.fromCharCode(cha); } if (!flag){ return str; } else{ return cNode.nodeValue + ":" + str; } }
それにしても DOM って名前しか聞いたことなかったけど、書いてみたらすごく便利。あと思うように操作できて楽しい!