Правило: charCode пробела половинной ширины равен 32, а charCode пробела полной ширины равен 12288. Соответствующее соотношение между другими символами половинной ширины (33–126) и символами полной ширины (65281–65374) равно : разница 65248.
Как только вы найдете правила, код будет легко написать:
var hash = {'32': 'u3000'};
// от полуширины до полной ширины
функция sbc2dbc(str) {
var ret = [], i = 0, len = str.length, code, chr;
для (; я <len; ++i) {
код = str.charCodeAt(i);
chr = хэш[код];
if (!chr && code > 31 && code < 127) {
chr = хеш [код] = String.fromCharCode (код + 65248);
}
ret[i] = chr ? chr: str.charAt(i);
}
вернуть ret.join('');
}
Та же причина:
var hash = {'12288': ' '};
// От полной ширины до полуширины
функция dbc2sbc(str) {
var ret = [], i = 0, len = str.length, code, chr;
для (; я <len; ++i) {
код = str.charCodeAt(i);
chr = хэш[код];
if (!chr && code > 65280 && code < 65375) {
chr = хеш [код] = String.fromCharCode (код - 65248);
}
ret[i] = chr ? chr: str.charAt(i);
}
вернуть ret.join('');
}http://qqface.knowsky.com/
Приведенный выше код также преобразует символы в диапазоне 33–126. Зачастую это не то, что нам нужно (например, преобразование @ в @). Следующий код менее навязчив:
вар хеш = {};
// Преобразование половинной ширины в полную ширину. Конвертировать только [0-9a-zA-Z]
функция sbc2dbc_w(str) {
var ret = [], i = 0, len = str.length, code, chr;
для (; я <len; ++i) {
код = str.charCodeAt(i);
chr = хэш[код];
если (!chr &&
(47 < код && код < 58 ||
64 < код && код < 91 ||
96 <код && код <123)) {
chr = хеш [код] = String.fromCharCode (код + 65248);
}
ret[i] = chr ? chr: str.charAt(i);
}
вернуть ret.join('');
}
-