<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 }   回復  更多評論
      
    主站蜘蛛池模板: 亚洲国产精品无码久久九九| 国产精品免费网站| 亚洲精品乱码久久久久久蜜桃| 亚洲第一页在线播放| 另类免费视频一区二区在线观看| 亚洲欧洲中文日韩久久AV乱码| www亚洲精品久久久乳| 国产精品国产免费无码专区不卡 | 免费人成网站在线播放| 亚洲国产精品成人AV在线| 毛片免费在线播放| 亚洲成A人片77777国产| 免费一级毛片在线播放放视频| 免费少妇a级毛片| h在线看免费视频网站男男| 国产亚洲精品线观看动态图| 青青操免费在线观看| 色婷婷亚洲十月十月色天| 毛片亚洲AV无码精品国产午夜| 拔擦拔擦8x华人免费久久| 337p日本欧洲亚洲大胆人人| 亚洲成?v人片天堂网无码| 中国性猛交xxxxx免费看| 久久亚洲私人国产精品| 欧美日韩国产免费一区二区三区| 亚洲色大成网站WWW久久九九| 日本人成在线视频免费播放| 免费成人福利视频| 亚洲码欧美码一区二区三区| 亚洲M码 欧洲S码SSS222| 国产在线精品免费aaa片| 亚洲区视频在线观看| 免费成人黄色大片| 一级毛片免费观看不卡视频| 中文字幕乱码亚洲精品一区 | 亚洲综合在线观看视频| 在线观看免费人成视频| 精品成人一区二区三区免费视频| 亚洲午夜久久久久久噜噜噜| 99视频全部免费精品全部四虎| 亚洲AV无码一区二区大桥未久 |