之前写了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