JavaScriptでの英数字の半角全角変換は0xFEE0シフトするだけ

JavaScriptで全角英数字と半角英数字の変換をする時、どうしていますか?

マッピングファイルを自作して愚直に変換していませんか?

英数字と一部の記号の並び方は全角半角でほぼ同じなので、文字コードを 0xFEE0 分シフトするだけで相互に変換することが可能です。

半角英数字

半角英数字は U+0021 ~ U+007F になります。

0 1 2 3 4 5 6 7 8 9 A B C D E F
U+0020 ! " # $ % & ' ( ) * + , - . /
U+0030 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
U+0040 @ A B C D E F G H I J K L M N O
U+0050 P Q R S T U V W X Y Z [ \ ] ^ _
U+0060 ` a b c d e f g h i j k l m n o
U+0070 p q r s t u v w x y z { | } ~ DEL

全角英数字

全角英数字は U+FF01 ~ U+FF5E になります。

0 1 2 3 4 5 6 7 8 9 A B C D E F
U+FF00
U+FF10
U+FF20 I J
U+FF30 _
U+FF40
U+FF50

変換処理

入力された文字の文字コードを charCodeAt で取得します。

取得した値から 0xFEE0 を、全角→半角の場合は引き、半角→全角の場合は足すだけです。

// 全角英数字を半角英数字にする場合
function toHalfWidth(value) {
  return value.replace(/./g, (s) => {
    return String.fromCharCode(s.charCodeAt(0) - 0xFEE0);
  });
}

toHalfWidth('ABC123')  // 'ABC123'
// 半角数字を全角数字にする場合
function toFullWidth(value) {
  return value.replace(/./g, (s) => {
    return String.fromCharCode(s.charCodeAt(0) + 0xFEE0);
  });
}

toFullWidth('ABC123')   // 'ABC123'

以上

JavaScriptTips