第一个问题,你的范围有问题,
<script language=javascript>
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;
}
alert(DBC2SBC("FSDFSDG广泛豆腐干"))
</script>
下面的这段是我自己猜测的
全角转半角
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
而你的第二个问题,根本不用考虑混用的时候
因为
replace的第一个参数正则会区分开的

解决方案 »

  1.   

    就第一个问题shift+$在全角下输出为¥其CharCode为65509已经超出范围
    我知道这个范围是code >= 65281 && code <= 65373对于¥这样的符号又
    怎么办?第二个问题,replace会区分全角半角?怎么区分?
      

  2.   

    function ToDBC(obj)//全角转半角
    {    
                var str=obj.value;
                var result="";
                for (var i = 0; i < str.length; i++)
                {
                    if (str.charCodeAt(i)==12288)
                    {
                        result+= String.fromCharCode(str.charCodeAt(i)-12256);
                        continue;
                    }
                    if (str.charCodeAt(i)>65280 && str.charCodeAt(i)<65375)
                        result+= String.fromCharCode(str.charCodeAt(i)-65248);
                    else result+= String.fromCharCode(str.charCodeAt(i));
                }    
                obj.value=result;
    }