Regla: El código de caracteres de un espacio de ancho medio es 32 y el Código de caracteres de un espacio de ancho completo es 12288. La relación correspondiente entre otros caracteres de ancho medio (33 – 126) y caracteres de ancho completo (65281 – 65374) es : la diferencia es 65248.
Una vez que encuentre las reglas, el código será fácil de escribir:
var hash = {'32' : 'u3000'};
// de medio ancho a ancho completo
función sbc2dbc(cadena) {
var ret = [], i = 0, len = str.length, código, chr;
para (; yo < 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);
}
devolver ret.join('');
}
Misma razón:
var hash = {'12288' : ' '};
// De ancho completo a medio ancho
función dbc2sbc(cadena) {
var ret = [], i = 0, len = str.length, código, chr;
para (; yo < 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);
}
retorno ret.join('');
}http://qqface.knowsky.com/
El código anterior también convertirá los símbolos en el rango 33 - 126. Muchas veces, esto no es lo que necesitamos (como convertir @ a @). El siguiente código es menos intrusivo:
var hash = {};
// Convertir medio ancho a ancho completo. Convertir solo [0-9a-zA-Z]
función sbc2dbc_w(cadena) {
var ret = [], i = 0, len = str.length, código, chr;
para (; yo < len; ++i) {
código = str.charCodeAt(i);
chr = hash[código];
si (!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);
}
devolver ret.join('');
}
-