Regra: O charCode de um espaço de meia largura é 32, e o charCode de um espaço de largura total é 12288. O relacionamento correspondente entre outros caracteres de meia largura (33 – 126) e caracteres de largura total (65281 – 65374) é : a diferença é 65248.
Depois de encontrar as regras, o código será fácil de escrever:
var hash = {'32' : 'u3000'};
//de meia largura a largura total
função sbc2dbc(str) {
var ret = [], i = 0, len = str.length, código, chr;
for (; i <len; ++i) {
código = str.charCodeAt(i);
chr = hash[código];
if (!chr && código > 31 && código < 127) {
chr = hash[código] = String.fromCharCode(código + 65248);
}
ret[i] = chr ?chr : str.charAt(i);
}
retornar ret.join('');
}
Mesmo motivo:
var hash = {'12288': ' '};
// Largura total até meia largura
função dbc2sbc(str) {
var ret = [], i = 0, len = str.length, código, chr;
for (; i <len; ++i) {
código = str.charCodeAt(i);
chr = hash[código];
if (!chr && código > 65280 && código < 65375) {
chr = hash[código] = String.fromCharCode(código - 65248);
}
ret[i] = chr ?chr : str.charAt(i);
}
retornar ret.join('');
}http://qqface.knowsky.com/
O código acima também converterá os símbolos no intervalo 33 a 126. Muitas vezes, não é disso que precisamos (como converter @ em @). O código a seguir é menos intrusivo:
var hash = {};
// Converte meia largura em largura total. Converter apenas [0-9a-zA-Z]
função sbc2dbc_w(str) {
var ret = [], i = 0, len = str.length, código, chr;
for (; i <len; ++i) {
código = str.charCodeAt(i);
chr = hash[código];
se (!chr &&
(47 < código && código < 58 ||
64 < código && código < 91 ||
96 <código && código <123)) {
chr = hash[código] = String.fromCharCode(código + 65248);
}
ret[i] = chr ?chr : str.charAt(i);
}
retornar ret.join('');
}
-