小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

JavaScript 全角半角轉(zhuǎn)換問題

 quasiceo 2015-02-23
2010-12-28 17:32 302人閱讀 評論(0) 收藏 舉報(bào)

<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>
半角字符由一個字節(jié)保存,全角字符用兩個字節(jié)保存
所以碼值的絕對值小于256的就是半角,否則就是全角

問題一:全角除了空格charCode是12288落在0~65248之間,還有哪些在字符也落在這個區(qū)間之內(nèi)?
問題二:如果用正則
<script language="JAVAscript">
function go(obj){
obj.value=obj.value.replace(/([^/x00-/xff])/g,function($1){return String.fromCharCode($1.charCodeAt(0)-65248)});
}
由于正則不管是八進(jìn)制(最多3位),16進(jìn)制(2位)如果輸入的是全半角混編的怎么辦?
響應(yīng)者 1:
第一個問題,你的范圍有問題,
<script language=JAVAscript>
function DBC2SBC(str)
{

var result = '';
for(var i=0;i<str.length;i++){
code = str.charCodeAt(i);//獲取當(dāng)前字符的unicode編碼
if (code >= 65281 && code <= 65373)//在這個unicode編碼范圍中的是所有的英文字母已經(jīng)各種字符
{
result += String.fromCharCode(str.charCodeAt(i) - 65248);//把全角字符的unicode編碼轉(zhuǎn)換為對應(yīng)半角字符的unicode碼
}else if (code == 12288)//空格
{
result += String.fromCharCode(str.charCodeAt(i) - 12288 + 32);
}else
{
result += str.charAt(i);
}
}
return result;
}
alert(DBC2SBC("FSDFSDG廣泛豆腐干"))
</script>


下面的這段是我自己猜測的
全角轉(zhuǎn)半角
JAVAscript 是16位編碼
65281到65373只有這里面的數(shù)據(jù)才是全角,這里要有范圍限制的
關(guān)于65281的算法是這么來的
比如全角的字符A
編碼為FF21
轉(zhuǎn)成16進(jìn)制是
1111 1111 0010 0001
對兩個字節(jié)分別取10進(jìn)制的值
第一個字節(jié)是
65280
第二個自己是
33
所以a的65313

對這個編碼減去
65248得半角的

65248比65280小32
所以我想ASC碼小于32的就不能轉(zhuǎn)換
因?yàn)檗D(zhuǎn)換了字符編碼的前一字節(jié)就不能是1111 1111即FF
就會比這個小,那應(yīng)該就不是全角了
就是說第一字節(jié)不能滿足全為1


而你的第二個問題,根本不用考慮混用的時候
因?yàn)?br> replace的第一個參數(shù)正則會區(qū)分開的
響應(yīng)者 2:
就第一個問題shift+$在全角下輸出為¥其CharCode為65509已經(jīng)超出范圍
我知道這個范圍是code >= 65281 && code <= 65373對于¥這樣的符號又
怎么辦?

第二個問題,replace會區(qū)分全角半角?怎么區(qū)分?
響應(yīng)者 3:
function ToDBC(obj)//全角轉(zhuǎn)半角
{
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;

}


///全角空格為12288,半角空格為32
///其他字符半角(33-126)與全角(65281-65374)的對應(yīng)關(guān)系是:均相差65248

1//半角轉(zhuǎn)換為全角函數(shù)
2 function ToDBC(txtstring)
3 {
4 var tmp = "";
5
6 for(var i=0;i<txtstring.length;i++)
7 {
8 if(txtstring.charCodeAt(i)==32)
9 {
10 tmp= tmp+ String.fromCharCode(12288);
11 }
12 if(txtstring.charCodeAt(i)<127)
13 {
14 tmp=tmp+String.fromCharCode(txtstring.charCodeAt(i)+65248);
15 }
16
17 }
18 return tmp;
19 }

//全角轉(zhuǎn)換為半角函數(shù)
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
}

主題推薦
javascript 正則 編碼 算法 數(shù)據(jù)
猜你在找
Javascript判斷日文全角半角長度
javascript中全角轉(zhuǎn)半角
javascript中全角轉(zhuǎn)半角
用javascript判斷字符是全角還是半角
HTMLJavascriptjavascript中全角轉(zhuǎn)半角
半角全角的轉(zhuǎn)換算法
JAVA正則替換字符串的全角半角標(biāo)點(diǎn)符號
正則替換字符串的全角半角標(biāo)點(diǎn)符號
正則替換字符串的全角半角標(biāo)點(diǎn)符號
默認(rèn)字符編碼是UTF8的linux服務(wù)器java計(jì)算字符串長度半角算一個全角算兩個
查看評論

  暫無評論

發(fā)表評論
  • 用 戶 名:
  • ilvu999
  • 評論內(nèi)容:
  • 插入代碼

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多