有同事在公司的OA上發(fā)了個(gè)貼子,,介紹在javascript中如何得到中英文混合字符串的長度。
用的是正則表達(dá)式,。
var str = ”坦克是tank的音譯”;
var len = str.match(/[^ -~]/g) == null ? str.length : str.length + str.match(/[^ -~]/g).length ;
我查了一下書,,有點(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ù)組長度為2
alert(str.match(/[^ -~]/g));
這樣,var len = str.match(/[^ -~]/g) == null ? str.length : str.length + str.match(/[^ -~]/g).length ;就可以得到str的正確長度了,。
在javascript中,,一個(gè)漢字的長度也被計(jì)算為1,常常在提交到數(shù)據(jù)庫中造成長度超標(biāo)的錯(cuò)誤,,現(xiàn)在用這個(gè)方法,,可以在提交前先檢測一番了。
這個(gè)是去掉回車的字符長度的計(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 ; |
|