59naga/hanzen - UTF-8 halfwidth katakana interconversion functions
var han= '。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワンガギグゲゴザジズゼゾダヂヅデドバパビピブプベペボポヷヴヺ';
var zen= '。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワンガギグゲゴザジズゼゾダヂヅデドバパビピブプベペボポヷヴヺ'
console.log(toZenkaku(han)===zen);// true
console.log(toHankaku(zen)===han);// true
function toZenkaku(str){
var dakuten= {'ガ':'ガ','ギ':'ギ','グ':'グ','ゲ':'ゲ','ゴ':'ゴ','ザ':'ザ','ジ':'ジ','ズ':'ズ','ゼ':'ゼ','ゾ':'ゾ','ダ':'ダ','ヂ':'ヂ','ヅ':'ヅ','デ':'デ','ド':'ド','バ':'バ','パ':'パ','ビ':'ビ','ピ':'ピ','ブ':'ブ','プ':'プ','ベ':'ベ','ペ':'ペ','ボ':'ボ','ポ':'ポ','ヷ':'ヷ','ヴ':'ヴ','ヺ':'ヺ'};
var dakutenRegExp= new RegExp('('+(Object.keys(dakuten)).join('|')+')','g');
var zenkaku= '。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン';
return str
.replace(dakutenRegExp,function(str){
return dakuten[str];
})
.replace(/[\uff61-\uff9d]/g,function(str){
return zenkaku[(str.charCodeAt(0) - 0xff61)];
})
;
}
function toHankaku(str){
var hankaku= {'ァ':'ァ','ア':'ア','ィ':'ィ','イ':'イ','ゥ':'ゥ','ウ':'ウ','ェ':'ェ','エ':'エ','ォ':'ォ','オ':'オ','カ':'カ','ガ':'ガ','キ':'キ','ギ':'ギ','ク':'ク','グ':'グ','ケ':'ケ','ゲ':'ゲ','コ':'コ','ゴ':'ゴ','サ':'サ','ザ':'ザ','シ':'シ','ジ':'ジ','ス':'ス','ズ':'ズ','セ':'セ','ゼ':'ゼ','ソ':'ソ','ゾ':'ゾ','タ':'タ','ダ':'ダ','チ':'チ','ヂ':'ヂ','ッ':'ッ','ツ':'ツ','ヅ':'ヅ','テ':'テ','デ':'デ','ト':'ト','ド':'ド','ナ':'ナ','ニ':'ニ','ヌ':'ヌ','ネ':'ネ','ノ':'ノ','ハ':'ハ','バ':'バ','パ':'パ','ヒ':'ヒ','ビ':'ビ','ピ':'ピ','フ':'フ','ブ':'ブ','プ':'プ','ヘ':'ヘ','ベ':'ベ','ペ':'ペ','ホ':'ホ','ボ':'ボ','ポ':'ポ','マ':'マ','ミ':'ミ','ム':'ム','メ':'メ','モ':'モ','ャ':'ャ','ヤ':'ヤ','ュ':'ュ','ユ':'ユ','ョ':'ョ','ヨ':'ヨ','ラ':'ラ','リ':'リ','ル':'ル','レ':'レ','ロ':'ロ','ヮ':'ワ','ワ':'ワ','ヰ':'イ','ヱ':'エ','ヲ':'ヲ','ン':'ン','ヴ':'ヴ','ヷ':'ヷ','ヸ':'イ゙','ヹ':'エ゙','ヺ':'ヺ','・':'・','ー':'ー','。':'。','「':'「','」':'」','、':'、',}
return str
.replace(/[\u3002\u300c\u300d\u3001\u30a1-\u30fc]/g,function(str){
return hankaku[str];
})
}