THINKPHP仿Word 统计字数的方法

项目需要根据文章字数自动统计字数,该方法和 word大概 一致, word 统计字数,相连的英文和数字(半角)会计算成一个字,如
good123就会统计成一个字,一下子也不知道该如何进行计算。

示例

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 统计出来的一致,也没有上面的问题了,但是这里有个特殊字符的问题,我这里只是列出了一部分的半角状态下的特殊字符。

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 统计出来的一致

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系统 草邦办公管理系统 草邦媒介资源系统
本软件不提供任何形式的明示或暗示担保,包括但不限于对适销性,特定目的的适用性和非侵权性的担保。无论是由于软件,使用或其他方式产生的,与之有关或与之有关的合同,侵权或其他形式的任何索赔,损害或其他责任,作者或版权所有者概不负责。

相关推荐

  1. THINKPHP仿Word 统计字数方法

    2024-03-23 11:38:01       38 阅读
  2. 统计文件夹下所有文件字数

    2024-03-23 11:38:01       41 阅读
  3. thinkphp6 模糊查找json下字段

    2024-03-23 11:38:01       47 阅读
  4. Thinkphp封装统一响应

    2024-03-23 11:38:01       33 阅读
  5. thinkphp5 中控制器创建和使用方法

    2024-03-23 11:38:01       35 阅读
  6. thinkphp5 中路由常见使用方法

    2024-03-23 11:38:01       30 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-23 11:38:01       91 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-23 11:38:01       97 阅读
  3. 在Django里面运行非项目文件

    2024-03-23 11:38:01       78 阅读
  4. Python语言-面向对象

    2024-03-23 11:38:01       88 阅读

热门阅读

  1. Go使用Terraform 库

    2024-03-23 11:38:01       40 阅读
  2. tcp/ip中的粘包问题的处理逻辑

    2024-03-23 11:38:01       44 阅读
  3. 质量模型、软件测试流程和测试用例

    2024-03-23 11:38:01       45 阅读
  4. 代码随想录算法训练营 Day27 回溯算法3

    2024-03-23 11:38:01       40 阅读
  5. Python从入门到精通秘籍十六

    2024-03-23 11:38:01       43 阅读
  6. 100个python代码(三)

    2024-03-23 11:38:01       38 阅读
  7. Linux 系统中 OpenCV-Python 编程环境

    2024-03-23 11:38:01       42 阅读
  8. Codeforces Round 935 (Div. 3)

    2024-03-23 11:38:01       40 阅读
  9. mybatisplus和mybatis兼容问题

    2024-03-23 11:38:01       43 阅读
  10. 第十三节 JDBC异常

    2024-03-23 11:38:01       37 阅读