JavaScript で半角⇔全角に変換するには?

ショコラ
ショコラ

JavaScript で半角⇔全角に変換するには?

昔作った JavaScript の半角⇔全角変換テーブル(ソースの henkan_table変数)。
このまま腐らせるのももったいなので HTA でサンプルプログラムを作ってみました。

もっさん先輩
もっさん先輩

こちらのリンクを右クリックしてファイルをダウンロードできます。

https://answorz.com/5086/henkan.hta

スクリプトの説明

<!DOCTYPE html>
<html lang="ja">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta charset="utf-8">
<title>半角全角変換</title>
<script src="https://cdn.jsdelivr.net/npm/jquery@3.6.1/dist/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/fomantic-ui@2.9.0/dist/semantic.min.css">
<script src="https://cdn.jsdelivr.net/npm/fomantic-ui@2.9.0/dist/semantic.min.js"></script>
<hta:application id="hta"/>
<script>
var henkan_table = {
'ヴ' :'ヴ',
'ガ' :'ガ',
'ギ' :'ギ',
'グ' :'グ',
'ゲ' :'ゲ',
'ゴ' :'ゴ',
'ザ' :'ザ',
'ジ' :'ジ',
'ズ' :'ズ',
'ゼ' :'ゼ',
'ゾ' :'ゾ',
'ダ' :'ダ',
'ヂ' :'ヂ',
'ヅ' :'ヅ',
'デ' :'デ',
'ド' :'ド',
'バ' :'バ',
'パ' :'パ',
'ビ' :'ビ',
'ピ' :'ピ',
'ブ' :'ブ',
'プ' :'プ',
'ベ' :'ベ',
'ペ' :'ペ',
'ボ' :'ボ',
'ポ' :'ポ',
' '  :' ',
'!'  :'!',
'#'  :'#',
'$'  :'$',
'%'  :'%',
'&'  :'&',
'('  :'(',
')'  :')',
'*'  :'*',
'+'  :'+',
','  :',',
'-'  :'-',
'.'  :'.',
'/'  :'/',
'0'  :'0',
'1'  :'1',
'2'  :'2',
'3'  :'3',
'4'  :'4',
'5'  :'5',
'6'  :'6',
'7'  :'7',
'8'  :'8',
'9'  :'9',
':'  :':',
';'  :';',
'<'  :'<',
'='  :'=',
'>'  :'>',
'?'  :'?',
'@'  :'@',
'A'  :'A',
'B'  :'B',
'C'  :'C',
'D'  :'D',
'E'  :'E',
'F'  :'F',
'G'  :'G',
'H'  :'H',
'I'  :'I',
'J'  :'J',
'K'  :'K',
'L'  :'L',
'M'  :'M',
'N'  :'N',
'O'  :'O',
'P'  :'P',
'Q'  :'Q',
'R'  :'R',
'S'  :'S',
'T'  :'T',
'U'  :'U',
'V'  :'V',
'W'  :'W',
'X'  :'X',
'Y'  :'Y',
'Z'  :'Z',
'['  :'[',
'"'  :'”',
'\'' :'’',
'\\' :'¥',
']'  :']',
'^'  :'^',
'_'  :'_',
'`'  :'‘',
'a'  :'a',
'b'  :'b',
'c'  :'c',
'd'  :'d',
'e'  :'e',
'f'  :'f',
'g'  :'g',
'h'  :'h',
'i'  :'i',
'j'  :'j',
'k'  :'k',
'l'  :'l',
'm'  :'m',
'n'  :'n',
'o'  :'o',
'p'  :'p',
'q'  :'q',
'r'  :'r',
's'  :'s',
't'  :'t',
'u'  :'u',
'v'  :'v',
'w'  :'w',
'x'  :'x',
'y'  :'y',
'z'  :'z',
'{'  :'{',
'|'  :'|',
'}'  :'}',
'~'  :'~',
'。'  :'。',
'「'  :'「',
'」'  :'」',
'、'  :'、',
'・'  :'・',
'ヲ'  :'ヲ',
'ァ'  :'ァ',
'ィ'  :'ィ',
'ゥ'  :'ゥ',
'ェ'  :'ェ',
'ォ'  :'ォ',
'ャ'  :'ャ',
'ュ'  :'ュ',
'ョ'  :'ョ',
'ッ'  :'ッ',
'ー'  :'ー',
'ア'  :'ア',
'イ'  :'イ',
'ウ'  :'ウ',
'エ'  :'エ',
'オ'  :'オ',
'カ'  :'カ',
'カ'  :'ヵ',
'キ'  :'キ',
'ク'  :'ク',
'ケ'  :'ヶ',
'ケ'  :'ケ',
'コ'  :'コ',
'サ'  :'サ',
'シ'  :'シ',
'ス'  :'ス',
'セ'  :'セ',
'ソ'  :'ソ',
'タ'  :'タ',
'チ'  :'チ',
'ツ'  :'ツ',
'テ'  :'テ',
'ト'  :'ト',
'ナ'  :'ナ',
'ニ'  :'ニ',
'ヌ'  :'ヌ',
'ネ'  :'ネ',
'ノ'  :'ノ',
'ハ'  :'ハ',
'ヒ'  :'ヒ',
'フ'  :'フ',
'ヘ'  :'ヘ',
'ホ'  :'ホ',
'マ'  :'マ',
'ミ'  :'ミ',
'ム'  :'ム',
'メ'  :'メ',
'モ'  :'モ',
'ヤ'  :'ヤ',
'ユ'  :'ユ',
'ヨ'  :'ヨ',
'ラ'  :'ラ',
'リ'  :'リ',
'ル'  :'ル',
'レ'  :'レ',
'ロ'  :'ロ',
'ワ'  :'ヮ',
'ワ'  :'ワ',
'ン'  :'ン',
'゙'  :'゛',
'゚'  :'゜',
''   :''
};
$(function(){
  window.resizeTo(800,640);
  $('#han2zen').on('click',function(){
    let str = $('#text1').val();
    for (let key in henkan_table) {
      let char = key;
      if (-1 != $.inArray(key,['$','(',')','*','+','.','?','[',']','\\','^','|'])) {
        char = '\\'+key;
      }
      str = str.replace(new RegExp(char,'g'),henkan_table[key]);
    }
    $('#text2').val(str);
    return false;
  });
  $('#zen2han').on('click',function(){
    let str = $('#text1').val();
    for (let key in henkan_table) {
      let char = key;
      str = str.replace(new RegExp(henkan_table[key],'g'),char);
    }
    $('#text2').val(str);
    return false;
  });
});
</script>
</head>
<body>
<form class="ui form">
  <div class="ui basic segment">
    <div class="ui two column grid">
      <div class="column">
        <textarea id="text1" rows="30" class="textarea" placeholder="変換前"></textarea>
      </div>
      <div class="column">
        <textarea id="text2" rows="30" class="textarea" placeholder="変換後"></textarea>
      </div>
    </div>
    <div class="ui fluid buttons">
      <button class="ui positive button" id="han2zen">半角→全角変換</button>
      <div class="or"></div>
      <button class="ui negative button" id="zen2han">全角→半角変換</button>
    </div>
  </div>
</form>
</body>
</html>
Scroll to Top