PHP 纯汉字包括生僻字的验证方式

之前写了php识别纯汉字,但是实际使用中发现还有生僻字没法判断,改进了一点点
首先引入拼音库
引入方法参考
然后就可以
通过链式判断是否是中文

/**
     * 中文转拼音-支持多音字-音标
     * @param string $str utf8字符串
     * @param string $ret_format 返回格式 [all:全拼音|first:首字母| single 单个首字母] 返回所以汉字拼音
     * @param string $space 字符间隔
     * @param string $tone 是否获取音标
     * @return string             拼音字符串
     */
    function pinyinMultitone($str, $ret_format = 'all', $space = " ", $tone = false)
    {

        //不提前载入,字典文件在使用时已文件流形式打开并逐行遍历,运用 yield 特性分配内存,对于内存的消耗非常微小,但转换较慢
        //$pinyin = new Pinyin('Overtrue\Pinyin\GeneratorFileDictLoader');
        //将字典预先载入内存-优点是比较快-适用于内存相对充足的服务器
        $pinyin = new Pinyin('Overtrue\Pinyin\MemoryFileDictLoader');
        //以上两种二选一
        if ($tone == true) {
            $pinyin = $pinyin->convert($str, PINYIN_UNICODE);
        } else {
            $pinyin = $pinyin->convert($str);
        }
        $rs = "";
        foreach ($pinyin as $value) {
            if ($ret_format == "first") {
                $chr = mb_substr($value, 0, 1);
                $rs  .= $chr . $space;
            } elseif ($ret_format == 'single') {
                $chr = mb_substr($value, 0, 1);
                return $chr;
            } else {
                $rs .= $value . $space;
            }
        }

        return rtrim($rs, ' ');
    }

//匹配汉字  自己新建一个判断类
if (preg_match("/^[\x{4e00}-\x{9fa5}]{0,}$/u", $name) || 
(mb_strlen($name) == strlen($this->pinyinMultitone($name,'first','')) && !preg_match('/[a-zA-Z0-9]+/', $name))) {
     return true;
}else{
    return false;
}

原文链接:https://blog.csdn.net/qq_38365998/article/details/119140097

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值