<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 閱讀(4650) 評論(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无码专区国产乱码4SE| 亚洲成人影院在线观看| 亚洲免费视频网站| 在线免费观看伊人三级电影| 国产亚洲精久久久久久无码AV| 人成免费在线视频| 亚洲一级片内射网站在线观看| 一级做a毛片免费视频| 久久亚洲国产成人影院网站 | 又大又硬又爽免费视频| 黄色一级毛片免费看| 免费在线观看你懂的| 中国在线观看免费的www| 亚洲国产成人片在线观看无码| 久久免费观看国产精品| 亚洲影视一区二区| 免费看的黄色大片| 成人嫩草影院免费观看| 亚洲AV无码一区二区三区DV| 91免费国产自产地址入| 久久亚洲精品无码gv| 亚洲人成人网站色www| 99在线观看精品免费99| 亚洲日韩亚洲另类激情文学| 免费成人av电影| 在线观看肉片AV网站免费| 亚洲无成人网77777| 日本免费福利视频| 中文字幕免费在线视频| 亚洲天堂电影在线观看| 又粗又硬免费毛片| 免费视频成人片在线观看| 亚洲精品女同中文字幕| 亚洲伊人久久精品影院| 国产99视频精品免费观看7| 免费视频精品一区二区| 亚洲精品美女在线观看| 成人亚洲综合天堂| 又大又硬又爽又粗又快的视频免费| 亚洲中文字幕久久无码| 久久久久久久综合日本亚洲|