JavaScriptで半角テキストと全角テキストの相互変換

JavaScriptで半角テキストと全角テキストの相互変換

半角英数字を全角英数字に変換

半角英数字のUnicode文字範囲

  • 数字(0-9):0x30 - 0x39
  • 英字(A-Z):0x41 - 0x5A
  • 英字(a-z):0x61 - 0x7A

それぞれの文字コードに"0xFEE0"を足して全角文字にシフトします。

function toFullWidth(str) {
  return str.replace(/[A-Za-z0-9]/g, (char) => {
    return String.fromCharCode(char.charCodeAt(0) + 0xFEE0);
  });
}

console.log("半角から全角:", toFullWidth("AbcDef123")); // "AbcDef123"

全角英数字を半角英数に変換

全角英数字のUnicode文字範囲

  • 数字(0-9):0xFF10 - 0xFF19
  • 英字(A-Z):0xFF21 - 0xFF3A
  • 英字(a-z):0xFF41 - 0xFF5A

それぞれの文字コードから"0xFEE0"を引いて半角文字にシフトします。

function toHalfWidth(str) {
  return str.replace(/[---]/g, (char) => {
    return String.fromCharCode(char.charCodeAt(0) - 0xFEE0);
  });
}

console.log("半角から全角:", toFullWidth("AbcDef123")); // "AbcDef123"

半角カタカナを全角カタカナに変換

マッピング配列を用意して該当文字列を1文字ずつ変換をかけていきます。

const halfToFullMap = {
  'ア': 'ア', 'イ': 'イ', 'ウ': 'ウ', 'エ': 'エ', 'オ': 'オ',
  'カ': 'カ', 'キ': 'キ', 'ク': 'ク', 'ケ': 'ケ', 'コ': 'コ',
  'サ': 'サ', 'シ': 'シ', 'ス': 'ス', 'セ': 'セ', 'ソ': 'ソ',
  'タ': 'タ', 'チ': 'チ', 'ツ': 'ツ', 'テ': 'テ', 'ト': 'ト',
  'ナ': 'ナ', 'ニ': 'ニ', 'ヌ': 'ヌ', 'ネ': 'ネ', 'ノ': 'ノ',
  'ハ': 'ハ', 'ヒ': 'ヒ', 'フ': 'フ', 'ヘ': 'ヘ', 'ホ': 'ホ',
  'マ': 'マ', 'ミ': 'ミ', 'ム': 'ム', 'メ': 'メ', 'モ': 'モ',
  'ヤ': 'ヤ', 'ユ': 'ユ', 'ヨ': 'ヨ',
  'ラ': 'ラ', 'リ': 'リ', 'ル': 'ル', 'レ': 'レ', 'ロ': 'ロ',
  'ワ': 'ワ', 'ヲ': 'ヲ', 'ン': 'ン',
  'ァ': 'ァ', 'ィ': 'ィ', 'ゥ': 'ゥ', 'ェ': 'ェ', 'ォ': 'ォ',
  'ッ': 'ッ', 'ャ': 'ャ', 'ュ': 'ュ', 'ョ': 'ョ',
  '゙': '゛', '゚': '゜'
};

function toFullWidthKatakana(str) {
  return str.split('').map(char => halfToFullMap[char] || char).join('');
}

console.log("半角から全角:", toFullWidthKatakana("アイウエオガギグゲゴ")); // "アイウエオカ゛キ゛ク゛ケ゛コ゛"

全角カタカナを半角カタカナに変換

const fullToHalfMap = {
  'ア': 'ア', 'イ': 'イ', 'ウ': 'ウ', 'エ': 'エ', 'オ': 'オ',
  'カ': 'カ', 'キ': 'キ', 'ク': 'ク', 'ケ': 'ケ', 'コ': 'コ',
  'サ': 'サ', 'シ': 'シ', 'ス': 'ス', 'セ': 'セ', 'ソ': 'ソ',
  'タ': 'タ', 'チ': 'チ', 'ツ': 'ツ', 'テ': 'テ', 'ト': 'ト',
  'ナ': 'ナ', 'ニ': 'ニ', 'ヌ': 'ヌ', 'ネ': 'ネ', 'ノ': 'ノ',
  'ハ': 'ハ', 'ヒ': 'ヒ', 'フ': 'フ', 'ヘ': 'ヘ', 'ホ': 'ホ',
  'マ': 'マ', 'ミ': 'ミ', 'ム': 'ム', 'メ': 'メ', 'モ': 'モ',
  'ヤ': 'ヤ', 'ユ': 'ユ', 'ヨ': 'ヨ',
  'ラ': 'ラ', 'リ': 'リ', 'ル': 'ル', 'レ': 'レ', 'ロ': 'ロ',
  'ワ': 'ワ', 'ヲ': 'ヲ', 'ン': 'ン',
  'ァ': 'ァ', 'ィ': 'ィ', 'ゥ': 'ゥ', 'ェ': 'ェ', 'ォ': 'ォ',
  'ッ': 'ッ', 'ャ': 'ャ', 'ュ': 'ュ', 'ョ': 'ョ',
  '゛': '゙', '゜': '゚'
};

function toHalfWidthKatakana(str) {
  return str.split('').map(char => fullToHalfMap[char] || char).join('');
}

console.log("全角から半角:", toHalfWidthKatakana("アイウエオカ゛キ゛ク゛ケ゛コ゛")); // "アイウエオガギグゲゴ"