JavaScript 全半角转换

王朝学院·作者佚名  2010-02-04
窄屏简体版  字體: 小  |  中  |  大  |  超大  

规律:半角空格的 charCode 为 32, 全角空格为 12288. 其他半角字符 ( 33 – 126 ) 与全角 ( 65281 – 65374 ) 的对应关系是:均相差 65248.

找好规律,代码就好写了:

var hash = {'32' : '\u3000'};

// 半角转全角

function sbc2dbc(str) {

var ret = [], i = 0, len = str.length, code, chr;

for (; i < len; ++i) {

code = str.charCodeAt(i);

chr = hash[code];

if (!chr && code > 31 && code < 127) {

chr = hash[code] = String.fromCharCode(code + 65248);

}

ret[i] = chr ? chr : str.charAt(i);

}

return ret.join('');

}

同理:

var hash = {'12288' : ' '};

// 全角转半角

function dbc2sbc(str) {

var ret = [], i = 0, len = str.length, code, chr;

for (; i < len; ++i) {

code = str.charCodeAt(i);

chr = hash[code];

if (!chr && code > 65280 && code < 65375) {

chr = hash[code] = String.fromCharCode(code - 65248);

}

ret[i] = chr ? chr : str.charAt(i);

}

return ret.join('');

}http://qqface.knowsky.com/

上面的代码会将 33 - 126 中间的符号也转换。很多时候,这并不是我们需要的(比如将 @ 转换为 @)。下面的代码侵入性更小:

var hash = {};

// 半角转全角。仅转换 [0-9a-zA-Z]

function sbc2dbc_w(str) {

var ret = [], i = 0, len = str.length, code, chr;

for (; i < len; ++i) {

code = str.charCodeAt(i);

chr = hash[code];

if (!chr &&

(47 < code && code < 58 ||

64 < code && code < 91 ||

96 < code && code < 123)) {

chr = hash[code] = String.fromCharCode(code + 65248);

}

ret[i] = chr ? chr : str.charAt(i);

}

return ret.join('');

}

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航