Fastadmin中实现获取名称首字母

在Fastadmin中实现获取名称首字母

目录

安装依赖包

添加公共函数

测试

总结


安装依赖包

命令如下:

bash 复制代码
composer require overtrue/pinyin

安装完成

添加公共函数

在框架common.php文件中添加获取首字母公共函数,

这样可以在项目的需要的地方调用。代码如下:

php 复制代码
/**
 * 根据输入名称(中文/字母)获取首字母,无法识别返回#
 * @param string $name 输入名称(支持中文、字母、混合字符)
 * @return string 首字母(大写)或#
 */
function getFirstLetter(string $name): string
{
    // 初始化拼音转换实例
    $pinyin = new Overtrue\Pinyin\Pinyin();

    // 过滤非中文、非字母的字符(保留中文和字母)
    // 匹配规则:[\x{4e00}-\x{9fa5}] = 中文,[a-zA-Z] = 字母,u修饰符支持中文匹配
    $cleanName = preg_replace('/[^\x{4e00}-\x{9fa5}a-zA-Z]/u', '', $name);

    // 过滤后为空,直接返回#
    if (empty($cleanName)) {
        return '#';
    }

    // 优先提取字母首字母
    preg_match('/[a-zA-Z]/', $cleanName, $letterMatches);
    if (!empty($letterMatches)) {
        // 提取第一个字母并转为大写
        return strtoupper($letterMatches[0]);
    }

    // 无字母,处理中文转首字母逻辑
    try {
        // 转换为中文拼音首字母数组
        $firstLetters = $pinyin->abbr($cleanName);
        $firstLetter = !empty($firstLetters) ? strtoupper($firstLetters[0]) : '#';

        // 校验是否为有效字母,无效则返回#
        return preg_match('/^[A-Z]$/', $firstLetter) ? $firstLetter : '#';
    } catch (\Exception $e) {
        // 转换异常返回#
        return '#';
    }
}

测试

php 复制代码
var_dump(getFirstLetter("张三"));        // 输出 string(1) "Z"
var_dump(getFirstLetter("李四123"));     // 输出 string(1) "L"
var_dump(getFirstLetter("abc测试"));     // 输出 string(1) "A"(优先字母)
var_dump(getFirstLetter("123456"));      // 输出 string(1) "#"
var_dump(getFirstLetter(""));            // 输出 string(1) "#"
var_dump(getFirstLetter("😀h哈哈"));     // 输出 string(1) "H"(优先字母)

总结

使用composer安装的依赖库,实现项目的一个小功能,简单记录一下

相关推荐
两个人的幸福9 天前
Windows 桌面应用自研 PHP 队列(下):完整代码与六大工程化优化
php
BingoGo11 天前
PHP 泛型之殇 泛型 RFC 提案被拒绝
后端·php
JaguarJack11 天前
PHP 泛型之殇 泛型 RFC 提案被拒绝
后端·php
用户30745969820712 天前
PHP 扩展——从入门到理解
php
鹏仔先生12 天前
拷贝漫画APP下载页PHP程序,后台带免费AI写作
php
云水一下13 天前
从零开始学 PHP 系列(一):PHP 的前世今生与开发环境搭建
开发语言·php
xingpanvip13 天前
星盘接口开发文档:本命盘接口指南
android·开发语言·css·php·lua
酉鬼女又兒13 天前
零基础入门计算机网络运输层:端到端通信核心作用、端口号分类规则、复用分用工作机制及UDP与TCP协议全方位对比详解
网络·网络协议·tcp/ip·计算机网络·考研·udp·php
dog25013 天前
不要再继续优化 TCP
网络协议·tcp/ip·php
Channing Lewis13 天前
PHP 解析 Excel 的那些坑:一次“行号错位”引发的数据丢失
开发语言·php·excel