littleQ

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

            BlogJava :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
            33 Posts :: 0 Stories :: 60 Comments :: 0 Trackbacks
          在js里,一個(gè)中文字符的length是1,但是提交到數(shù)據(jù)庫(kù)中,就占了兩個(gè)字節(jié),驗(yàn)證誤差,直接拋異常。
          如果一個(gè)字段在oracle里是varchar2(64),如果錄入33個(gè)漢字,用length的話是33,但是到oracle里就是66個(gè)字節(jié)了,插入操作肯定出錯(cuò)。
          我們可以定義一個(gè)新的函數(shù)getBytes()取得字符串的字節(jié)數(shù),在java里,這個(gè)函數(shù)是標(biāo)準(zhǔn)函數(shù)。
          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(
          "字符超過(guò)64個(gè)字符");
              
          return false;
              }

              
          return true;
          }
          getBytes用正則表達(dá)式來(lái)判斷字符串中包含漢字的個(gè)數(shù),包含的漢字都放到數(shù)組cArr中,這樣cArr的長(zhǎng)度就是漢字的總數(shù)。getBytes方法返回length加上漢字?jǐn)?shù),就是總的字節(jié)數(shù)。
          只是使用了[^\x00-\xff],這個(gè)有點(diǎn)惡心,有些特殊字符也是能匹配到的,比如}等。
          但是如果使用[^\u4E00-\u9FA5]的話,卻不能匹配到中文……

          posted on 2008-08-12 15:52 littleQ 閱讀(6309) 評(píng)論(6)  編輯  收藏 所屬分類(lèi): java

          Feedback

          # re: JS驗(yàn)證中文長(zhǎng)度[未登錄](méi) 2008-08-12 20:19 MoXie
          http://bbs.51js.com/viewthread.php?tid=79954

          form.filter.js mb_strlen  回復(fù)  更多評(píng)論
            

          # re: JS驗(yàn)證中文長(zhǎng)度 2008-08-13 21:25 fyxruben
          用length的話是33,但是到oracle里就是66個(gè)字節(jié)了

          -------這個(gè)不一定,你數(shù)據(jù)要是是UTF-8可能就是99了  回復(fù)  更多評(píng)論
            

          # re: JS驗(yàn)證中文長(zhǎng)度[未登錄](méi) 2008-08-26 12:25 屹礫
          UTF8可能是1-4個(gè)字節(jié)  回復(fù)  更多評(píng)論
            

          # re: JS驗(yàn)證中文長(zhǎng)度 2014-08-20 10:08 tytyutuyyututyutuytutyut
          asdadasdadasdada  回復(fù)  更多評(píng)論
            

          # re: JS驗(yàn)證中文長(zhǎng)度 2014-08-20 10:08 tytyutuyyututyutuytutyut
          dsfdsfsfdsf  回復(fù)  更多評(píng)論
            

          # re: JS驗(yàn)證中文長(zhǎng)度 2014-08-20 10:08 tytyutuyyututyutuytutyut
          1212121212  回復(fù)  更多評(píng)論