問題 于 2006-09-14 14:02
<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="
JAVAscript">
function go(obj){
obj.value=obj.value.replace(/([^\x00-\xff])/g,function($1){return String.fromCharCode($1.charCodeAt(0)-65248)});
}
由于正則不管是八進制(最多3位),16進制(2位)如果輸入的是全半角混編的怎么辦?
響應者 1:
第一個問題,你的范圍有問題,
<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的第一個參數正則會區分開的
響應者 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;
}
posted on 2007-02-02 20:25
???MengChuChen 閱讀(4650)
評論(1) 編輯 收藏 所屬分類:
java_code