有同事在公司的OA上發(fā)了個(gè)貼子,介紹在javascript中如何得到中英文混合字符串的長(zhǎng)度。
用的是正則表達(dá)式。
var str = ”坦克是tank的音譯”;
var len = str.match(/[^ -~]/g) == null ? str.length : str.length + str.match(/[^ -~]/g).length ;
我查了一下書(shū),有點(diǎn)明白了:
西文常用字符集由空格“ ”(0x20)到“~”(0x7e)構(gòu)成,漢字會(huì)落在這個(gè)字符集外,而正則表達(dá)式[^ -~]表示除空格到“~”外的字符集。
string.match(regex) 會(huì)以數(shù)組形式返回字符串string中匹配正則表達(dá)式regex的子串,所以,
str.match(/[^ -~]/g)會(huì)以數(shù)組的形式返回一個(gè)個(gè)漢字。例如
var str = "dd大哥";
//顯示"大,哥",數(shù)組中返回兩個(gè)漢字,數(shù)組長(zhǎng)度為2
alert(str.match(/[^ -~]/g));
這樣,var len = str.match(/[^ -~]/g) == null ? str.length : str.length + str.match(/[^ -~]/g).length ;就可以得到str的正確長(zhǎng)度了。
在javascript中,一個(gè)漢字的長(zhǎng)度也被計(jì)算為1,常常在提交到數(shù)據(jù)庫(kù)中造成長(zhǎng)度超標(biāo)的錯(cuò)誤,現(xiàn)在用這個(gè)方法,可以在提交前先檢測(cè)一番了。
這個(gè)是去掉回車的字符長(zhǎng)度的計(jì)算的方法
var noteLen = note.match(/[^\r|\n| -~]/g) == null ? note.replace(/[\r|\n]/g,"").length : note.replace(/[\r|\n]/g,"").length + note.match(/[^\r|\n| -~]/g).length ;
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。