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

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

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

    littleQ

    終于明白曾經他們失落的目光,當年的你們是否一樣;間有懈怠或有頹放,難知多久方能補上;今起,不再彷徨!

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      33 Posts :: 0 Stories :: 60 Comments :: 0 Trackbacks
    在js里,一個中文字符的length是1,但是提交到數據庫中,就占了兩個字節,驗證誤差,直接拋異常。
    如果一個字段在oracle里是varchar2(64),如果錄入33個漢字,用length的話是33,但是到oracle里就是66個字節了,插入操作肯定出錯。
    我們可以定義一個新的函數getBytes()取得字符串的字節數,在java里,這個函數是標準函數。
    String.prototype.getBytes = function() {    
        
    var cArr = this.match(/[^\x00-\xff]/ig);    
        
    return this.length + (cArr == null ? 0 : cArr.length);    
    }


    function paramCheck(cur){
        
    if(cur.value.getBytes() > 64){
        alert(
    "字符超過64個字符");
        
    return false;
        }

        
    return true;
    }
    getBytes用正則表達式來判斷字符串中包含漢字的個數,包含的漢字都放到數組cArr中,這樣cArr的長度就是漢字的總數。getBytes方法返回length加上漢字數,就是總的字節數。
    只是使用了[^\x00-\xff],這個有點惡心,有些特殊字符也是能匹配到的,比如}等。
    但是如果使用[^\u4E00-\u9FA5]的話,卻不能匹配到中文……

    posted on 2008-08-12 15:52 littleQ 閱讀(6301) 評論(6)  編輯  收藏 所屬分類: java

    Feedback

    # re: JS驗證中文長度[未登錄] 2008-08-12 20:19 MoXie
    http://bbs.51js.com/viewthread.php?tid=79954

    form.filter.js mb_strlen  回復  更多評論
      

    # re: JS驗證中文長度 2008-08-13 21:25 fyxruben
    用length的話是33,但是到oracle里就是66個字節了

    -------這個不一定,你數據要是是UTF-8可能就是99了  回復  更多評論
      

    # re: JS驗證中文長度[未登錄] 2008-08-26 12:25 屹礫
    UTF8可能是1-4個字節  回復  更多評論
      

    # re: JS驗證中文長度 2014-08-20 10:08 tytyutuyyututyutuytutyut
    asdadasdadasdada  回復  更多評論
      

    # re: JS驗證中文長度 2014-08-20 10:08 tytyutuyyututyutuytutyut
    dsfdsfsfdsf  回復  更多評論
      

    # re: JS驗證中文長度 2014-08-20 10:08 tytyutuyyututyutuytutyut
    1212121212  回復  更多評論