PHP 仿 Word 統計文章字數

xingkong12138發表於2019-12-12
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

相關文章