[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
!"#$%&'()*+,-./:;<=>?@[\]^_`{|}
以下をそれぞれに置換。
‐-―
→\-
~〜
→~
→