零弐壱蜂

[JavaScript] 全角英数字記号を半角に変換する方法

2 min read

デモ

方法

コード

function zenkaku2hankaku(value) {
  const REGEX = /[A-Za-z0-9!"#$%&'()*+,-./:;<=>?@[\]^_`{|}]/g;

  // 入力値の全角を半角の文字に置換
  const result = value
    .replace(REGEX, function (s) {
      return String.fromCharCode(s.charCodeAt(0) - 0xfee0);
    })
    .replace(/[‐-―]/g, '-') // ハイフンなど
    .replace(/[~〜]/g, '~') // チルダ
    .replace(/ /g, ' '); // スペース

  return result;
}
文字コードの範囲チェック

正規表現を利用せずに文字コードの範囲をチェックする方法。

function zenkaku2hankaku(value) {
  let result = '';

  for (let i = 0; i < value.length; i++) {
    let charCode = value.charCodeAt(i);
    // 全角英数字記号を半角に変換
    if (charCode >= 0xff01 && charCode <= 0xff5e) {
      result += String.fromCharCode(charCode - 0xfee0);
    } else if (charCode === 0x2010 || charCode === 0x2013 || charCode === 0x2015) {
      result += '-'; // ハイフンなど
    } else if (charCode === 0xff5e || charCode === 0x301c) {
      result += '~'; // チルダ
    } else if (charCode === 0x3000) {
      result += ' '; // スペース
    } else {
      result += value.charAt(i);
    }
  }

  return result;
}

可読性を重視するなら正規表現を利用してreplaceメソッドを使うのが良い。

仕様

以下の全角文字をコードにしたがって半角に置き換える。

  • A\-Z
  • a\-z
  • 0\-9
  • !"#$%&'()*+,-./:;<=>?@[\]^_`{|}

以下をそれぞれに置換。

  • ‐-―\-
  • ~〜~
ページトップへ