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; }