<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  
 
}