第一个问题,你的范围有问题,
<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的第一个参数正则会区分开的
<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的第一个参数正则会区分开的
解决方案 »
- 请教一个关于IE6下jQuery修改图片src属性不能改变图片的问题。
- 如何解决JS加载引起的访问慢!!
- select删除option的问题.在线等
- 关于Jquery点击事件替换问题。求解答
- 如何正常遍历下面这个json字符串,实现三层菜单
- 大虾们,怎样才能根据request得到的内容来修改select列表框显示的文本呢???
- Javascript 可以把HTML button's onClick() 事件 传递给本地java JVM吗?多谢!
- 请问各位高手,如何在页面中禁止拷贝?禁止点击鼠标右键,以及禁止IE浏览器的编辑菜单?
- 问个javascript的导航切换问题!
- js 特殊字符问题
- 关于打开网页对话框(window.showModalDialog)的问题
- AJAX Dev Library Pack1即将发布,最大特色为全新漂亮的web界面,进入预览
我知道这个范围是code >= 65281 && code <= 65373对于¥这样的符号又
怎么办?第二个问题,replace会区分全角半角?怎么区分?
{
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;
}