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