規則:半角スペースのcharCodeは32、全角スペースのcharCodeは12288。その他の半角文字(33~126)と全角文字(65281~65374)の対応関係は、 :その差は65248です。
ルールを見つければ、コードは簡単に記述できます。
var ハッシュ = {'32' : 'u3000'};
// 半角から全角へ
関数 sbc2dbc(str) {
var ret = []、i = 0、len = str.length、code、chr;
for (; i < len; ++i) {
コード = str.charCodeAt(i);
chr = ハッシュ[コード];
if (!chr && コード > 31 && コード < 127) {
chr = ハッシュ[コード] = String.fromCharCode(コード + 65248);
}
ret[i] = chr ? chr : str.charAt(i);
}
戻り ret.join('');
}
同じ理由:
var ハッシュ = {'12288' : ' '};
// 全角から半角へ
関数 dbc2sbc(str) {
var ret = []、i = 0、len = str.length、code、chr;
for (; i < len; ++i) {
コード = str.charCodeAt(i);
chr = ハッシュ[コード];
if (!chr && コード > 65280 && コード < 65375) {
chr = ハッシュ[コード] = String.fromCharCode(コード - 65248);
}
ret[i] = chr ? chr : str.charAt(i);
}
戻り ret.join('');
}http://qqface.knowsky.com/
上記のコードは、33 ~ 126 の範囲の記号も変換します。多くの場合、これは必要なものではありません (@ を @ に変換するなど)。次のコードはそれほど侵入的ではありません。
var ハッシュ = {};
// 半角を全角に変換します。 [0-9a-zA-Z]のみを変換します
関数 sbc2dbc_w(str) {
var ret = []、i = 0、len = str.length、code、chr;
for (; i < len; ++i) {
コード = str.charCodeAt(i);
chr = ハッシュ[コード];
if (!chr &&
(47 < コード && コード < 58 ||
64 < コード && コード < 91 ||
96 < コード && コード < 123)) {
chr = ハッシュ[コード] = String.fromCharCode(コード + 65248);
}
ret[i] = chr ? chr : str.charAt(i);
}
戻り ret.join('');
}
-