function comment_count_word($str){
$str = preg_replace('/[\x80-\xff]{1,3}/', ' ', $str,-1,$n);//匹配中文或中文下的符號
$str = preg_replace('/[-\_\.!@#\$%\\\^&\*\)\(\+=\{\}\[\]\/",\'<>~\·`\?:;|]/', ' ', $str,-1,$j);//匹配英文下的符號
$n+=$j;
$n += str_word_count($str);
if(preg_match('/\d+/',$str)){
preg_replace('/\d+/', ' ', $str,-1,$i);
$n+=$i;
}
return $n;
}
該方法統計的字數大概和word一致,因為word統計字數,相連的英文和數字(半形)會計算成一個字,如all1234
就會統計成一個字。由於我沒想到這到底是是怎麼一個演算法,所以我這邊就沒法搞了。如果有大佬知道這麼搞,求講解!
以下的程式碼,是新搞出來的,經過測試,和word統計出來的一致,也沒有上面的問題了,但是這裡有個特殊字元的問題,我這裡只是列出了一部分的半形狀態下的特殊字元
function comment_count_word($str){
//$str =characet($str);
//判斷是否存在替換字元
$is_tihuan_count=substr_count($str,"龘");
try {
//先將回車換行符做特殊處理
$str = preg_replace('/(\r\n+|\s+| +)/',"龘",$str);
//處理英文字元數字,連續字母、數字、英文符號視為一個單詞
$str = preg_replace('/[a-z_A-Z0-9-\.!@#\$%\\\^&\*\)\(\+=\{\}\[\]\/",\'<>~`\?:;|]/',"m",$str);
//合併字元m,連續字母、數字、英文符號視為一個單詞
$str = preg_replace('/m+/',"*",$str);
//去掉回車換行符
$str = preg_replace('/龘+/',"",$str);
//返回字數
return mb_strlen($str)+$is_tihuan_count;
} catch (Exception $e) {
return 0;
}
}
我再來個js版本的,經過測試,和word統計出來的一致
function fnGetCpmisWords(str){
var sLen = 0;
try{
//先將回車換行符做特殊處理
str = str.replace(/(\r\n+|\s+| +)/g,"龘");
//處理英文字元數字,連續字母、數字、英文符號視為一個單詞
str = str.replace(/[\x00-\xff]/g,"m");
//合併字元m,連續字母、數字、英文符號視為一個單詞
str = str.replace(/m+/g,"*");
//去掉回車換行符
str = str.replace(/龘+/g,"");
//返回字數
sLen = str.length;
}catch(e){
}
return sLen;
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結
我的部落格:www.zhangkaixing.com