<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    【永恒的瞬間】
    ?Give me hapy ?

    JavaScript 全角半角轉換問題

    問題 于 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 閱讀(4658) 評論(1)  編輯  收藏 所屬分類: java_code

    FeedBack:
    # re: JavaScript 全角半角轉換問題
    2008-02-15 21:09 | 365
    半角全角轉換(Javascript)

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

    1//半角轉換為全角函數
    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 }

    1//全角轉換為半角函數
    function ToCDB(str)
    2 {
    3 var tmp = "";
    4 for(var i=0;i<str.length;i++)
    5 {
    6 if(str.charCodeAt(i)>65248&&str.charCodeAt(i)<65375)
    7 {
    8 tmp += String.fromCharCode(str.charCodeAt(i)-65248);
    9 }
    10 else
    11 {
    12 tmp += String.fromCharCode(str.charCodeAt(i));
    13 }
    14 }
    15 return tmp
    16 }   回復  更多評論
      
    主站蜘蛛池模板: 99蜜桃在线观看免费视频网站| xxxxx做受大片视频免费| 亚洲中文字幕日本无线码| 国产精品亚洲综合网站| 国产成人AV免费观看| 大地资源二在线观看免费高清| 国产精品亚洲不卡一区二区三区| 久久精品国产亚洲av日韩| 亚洲乱人伦中文字幕无码| 无码人妻一区二区三区免费n鬼沢| 日韩毛片免费无码无毒视频观看 | yy6080久久亚洲精品| 亚洲精品无码午夜福利中文字幕 | 亚洲成年人免费网站| 中文字幕精品亚洲无线码二区| 最新亚洲精品国偷自产在线| 今天免费中文字幕视频| 国产免费人人看大香伊| 亚洲国产成人在线视频| 最好免费观看高清在线| 日韩亚洲Av人人夜夜澡人人爽| 久久精品免费一区二区| 亚洲AV综合色区无码一区爱AV| 羞羞视频网站免费入口| 日韩一级免费视频| 亚洲专区一路线二| 1000部夫妻午夜免费 | 黄色毛片视频免费| 亚洲综合无码AV一区二区| 一级毛片免费观看不卡视频| 91亚洲国产成人久久精品网站| a毛片视频免费观看影院| 国产精品亚洲mnbav网站| 久久免费国产视频| 亚洲精品成人网站在线观看 | 大学生一级毛片免费看| 亚洲理论精品午夜电影| 99免费在线观看视频| 亚洲女女女同性video| 亚洲综合图色40p| 久久精品免费一区二区喷潮|