我想我們大家都知道,好多數(shù)據(jù)庫(kù)中存儲(chǔ)中文漢字與英文的字節(jié)數(shù)是不同的。如果某個(gè)字段長(zhǎng)度有固定大小,我們就需要對(duì)插入數(shù)據(jù)的大小進(jìn)行校驗(yàn)。之前做安邦電銷(xiāo)項(xiàng)目時(shí)就曾經(jīng)遇到該類(lèi)問(wèn)題,現(xiàn)在將其前臺(tái)與后臺(tái)的校驗(yàn)核心方法羅列出來(lái),希望能對(duì)大家有所幫助。
JS方法:
<script language=javascript>
String.prototype.lenB = function(){return this.replace(/[^\x00-\xff]/g, "**").length;}
var str = "這是一個(gè)可以將漢字計(jì)算成兩個(gè)字節(jié)的函數(shù) ";
alert( "老的算法 = " + str.length);
alert( "新的算法 = " + str.lenB());
</script>
說(shuō)明:上面JS里方法里的"**"表示把一個(gè)中文替換成英文的位數(shù)。"**"代表一個(gè)中文=兩個(gè)英文
java方法:
1 /**
2 * 獲取字符串的長(zhǎng)度,如果有中文,則每個(gè)中文字符計(jì)為2位
3 *
4 * @param value
5 * 指定的字符串
6 * @return 字符串的長(zhǎng)度
7 */
8 public int chineseLength(String value) {
9 int valueLength = 0;
10 String chinese = "[\u0391-\uFFE5]";
11 /* 獲取字段值的長(zhǎng)度,如果含中文字符,則每個(gè)中文字符長(zhǎng)度為2,否則為1 */
12 for (int i = 0; i < value.length(); i++) {
13 /* 獲取一個(gè)字符 */
14 String temp = value.substring(i, i + 1);
15 /* 判斷是否為中文字符 */
16 if (temp.matches(chinese)) {
17 /* 中文字符長(zhǎng)度為2 */
18 valueLength += 2;
19 } else {
20 /* 其他字符長(zhǎng)度為1 */
21 valueLength += 1;
22 }
23 }
24 return valueLength;
25 }
說(shuō)明:我想大家一看就懂了吧,關(guān)鍵語(yǔ)句是第18行。