在js里,一個中文字符的length是1,但是提交到數(shù)據(jù)庫中,就占了兩個字節(jié),驗證誤差,直接拋異常。
如果一個字段在oracle里是varchar2(64),如果錄入33個漢字,用length的話是33,但是到oracle里就是66個字節(jié)了,插入操作肯定出錯。
我們可以定義一個新的函數(shù)getBytes()取得字符串的字節(jié)數(shù),在java里,這個函數(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("字符超過64個字符");
return false;
}
return true;
}
getBytes用正則表達式來判斷字符串中包含漢字的個數(shù),包含的漢字都放到數(shù)組cArr中,這樣cArr的長度就是漢字的總數(shù)。getBytes方法返回length加上漢字?jǐn)?shù),就是總的字節(jié)數(shù)。
只是使用了[^\x00-\xff],這個有點惡心,有些特殊字符也是能匹配到的,比如}等。
但是如果使用[^\u4E00-\u9FA5]的話,卻不能匹配到中文……
|