<script language=
JAVAscript>
var s="b";
var strCode
for(var i=0;i<s.length;i++)
{
strCode=s.charCodeAt(i);
if((strCode>65248)||(strCode==12288))
{
alert("有全角");
break;
}
}
</script>
半角字符由一个字节保存,全角字符用两个字节保存
所以码值的绝对值小于256的就是半角,否则就是全角
问题一:全角除了空格charCode是12288落在0~65248之间,还有哪些在字符也落在这个区间之内?
问题二:如果用正则
<script language="
function go(obj){
obj.value=obj.value.replace(/([^/x00-/xff])/g,function($1){return String.fromCharCode($1.charCodeAt(0)-65248)});
}
由于正则不管是八进制(最多3位),16进制(2位)如果输入的是全半角混编的怎么办?
1:
第一个问题,你的范围有问题,
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的第一个参数正则会区分开的
2:
就第一个问题shift+$在全角下输出为¥其CharCode为65509已经超出范围
我知道这个范围是code >= 65281 && code <= 65373对于¥这样的符号又
怎么办?
第二个问题,replace会区分全角半角?怎么区分?
3:
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;
}
半角全角转换(Javascript)
///全角空格为12288,半角空格为32
///其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248
//半角转换为全角函数
function ToDBC(txtstring)
{
var tmp = "";
for(var i=0;i<txtstring.length;i++)
{
if(txtstring.charCodeAt(i)==32)
{
tmp= tmp+ String.fromCharCode(12288);
}
if(txtstring.charCodeAt(i)<127)
{
tmp=tmp+String.fromCharCode(txtstring.charCodeAt(i)+65248);
}
}
return tmp;
}
//全角转换为半角函数
function ToCDB(str)
{
var tmp = "";
for(var i=0;i<str.length;i++)
{
if(str.charCodeAt(i)>65248&&str.charCodeAt(i)<65375)
{
tmp += String.fromCharCode(str.charCodeAt(i)-65248);
}
else
{
tmp += String.fromCharCode(str.charCodeAt(i));
}
}
return tmp
}