THINKPHP仿Word 统计字数的方法

项目需要根据文章字数自动统计字数,该方法和 word大概 一致, word 统计字数,相连的英文和数字(半角)会计算成一个字,如

good123就会统计成一个字,一下子也不知道该如何进行计算。

示例

php 复制代码
function count_words($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;
}

说明: 在PHP中,str_word_count()函数用于统计字符串中的单词数量。
语法: str_word_count(string $string [, int $format = 0 [, string $charlist]])
参数说明:
$string:必需,要统计单词数量的字符串。 $format:可选,指定返回结果的格式,取值为0、1或2,默认为0。 如果$format为0,则函数返回字符串中的单词数量(默认)。 如果$format为1,则函数返回一个数组,其中包含字符串中的每个单词。 如果$format为2,则函数返回一个关联数组,其中键名为字符串中每个单词的位置,键值为对应的单词。 $charlist:可选,指定在统计单词时忽略的字母列表。默认为空格、制表符和换行符等标点符号。

新改造方法:

经过测试,和 word 统计出来的一致,也没有上面的问题了,但是这里有个特殊字符的问题,我这里只是列出了一部分的半角状态下的特殊字符。

php 复制代码
function count_words($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 统计出来的一致

javascript 复制代码
function Getwords(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;
}

如果你有更好的方法,欢迎指导

版权声明 草邦软件开发 草邦CMS系统 草邦办公管理系统 草邦媒介资源系统

本软件不提供任何形式的明示或暗示担保,包括但不限于对适销性,特定目的的适用性和非侵权性的担保。无论是由于软件,使用或其他方式产生的,与之有关或与之有关的合同,侵权或其他形式的任何索赔,损害或其他责任,作者或版权所有者概不负责。

相关推荐
BingoGo1 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack1 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack4 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理5 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
QQ5110082855 天前
python+springboot+django/flask的校园资料分享系统
spring boot·python·django·flask·node.js·php
WeiXin_DZbishe5 天前
基于django在线音乐数据采集的设计与实现-计算机毕设 附源码 22647
javascript·spring boot·mysql·django·node.js·php·html5