Code Tips‎ > ‎

JavaScript - 全角英数記号を半角にする関数



JavaScriptで全角英数記号を半角にする関数です。

JavaScriptでは文字を内部でUnicodeで保持していることと、Ascii文字の範囲は並び順が全角と半角で同じであることを利用し、Unicodeマッピングを単純にシフトすることで実現しています。「U+FF01~U+FF5E」の範囲の文字を「U+0021~U+007E」にシフト、つまり0xFEE0を引くだけでいいと。(逆に半角を全角にしたければ足せばOKです)

String.prototype.toHalfWidth = function() {
	return this.replace(/[!-~]/g, function(s) {
		return String.fromCharCode(s.charCodeAt(0) - 0xFEE0);
	});
}

使用例
var str = "123ABC*+-/";
alert(str.toHalfWidth());


以下が変換対象文字です。これが
!"#$%&'()*+,-./
0123456789:;<=>?
@ABCDEFGHIJKLMNO
PQRSTUVWXYZ[\]^_
`abcdefghijklmno
pqrstuvwxyz{|}~

こうなります
!"#$%&'()*+,-./
0123456789:;<=>?
@ABCDEFGHIJKLMNO
PQRSTUVWXYZ[\]^_
`abcdefghijklmno
pqrstuvwxyz{|}~


…ただしAscii文字は文字コードの表現を一部自由としているため、使用者にとっては一部意図しない変換になるかもしれません。例えば「\」は「\」になります。

「Arial」や「Times New Roman」などの英文字用フォントを使用している場合には全角のバックスラッシュが半角のバックスラッシュに変換されたように見えるでしょう。しかし「ゴシック体」や「明朝体」などのような日本語のフォントを使用している場合には「\」は、バックスラッシュではなく円マークで表示されてしまうでしょう。

あらゆるフォントの違い対応した汎用的な関数を作ることはできません。使用される方はこの点をご理解のうえ、日本語フォントでしか使用されないなどの前提をつけた上で、一部手直しをして使用してください。



2011/10/28