javascript全角半角问题

今天coding时,发现系统有一个地方是需要做全角自动转半角的,就从网上搜到了下面的东西
检查全角半角
var s = "bABD1232232";
var strCode;
for(var i=0;i<s.length;i++)
{
    strCode = s.charCodeAt(i);
    if((strCode>65248)||(strCode==12288))  //12288是空格
    {
        alert("有全角!");
        break;
    }
}
半角字符由一个字节保存,全角字符用两个字节保存,所以码值的绝对值小于256的就是半角,否则就是全角。
全角转半角的函数
function DBC2SBC(str)
{

var result = '';
for(var i=0;i<str.length;i++){
code = str.charCodeAt(i);                         //获取当前字符的unicode编码
if (code >= 65281 && code <= 65373)     //在这个unicode编码范围中的是所有的英文字母已及各种字符
{
    result += String.fromCharCode(str.charCodeAt(i) - 65248);
    //把全角字符的unicode编码转换为对应半角字符的unicode码
}else if (code == 12288)//空格
{
    result += String.fromCharCode(str.charCodeAt(i) - 12288 + 32);
}else
{
    result += str.charAt(i);
}
}
return result;
}
javascript是16位编码
65281到65373只有这里面的数据才是全角,这里要有范围限制的
关于65281的算法是这么来的
比如全角的字符A
编码为FF21
转成16进制是
1111 1111 0010 0001
对两个字节分别取10进制的值
第一个字节是
65280
第二个字节是
33
所以a的65313

对这个编码减去
65248得半角的

65248比65280小32
所以我想ASC码小于32的就不能转换
因为转换了字符编码的前一字节就不能是1111 1111即FF
就会比这个小,那应该就不是全角了
就是说第一字节不能满足全为1

转载于:https://www.cnblogs.com/singleblue/archive/2008/06/06/1215171.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值