0.9.0.1
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
import { pinyin } from 'pinyin-pro'
|
||||
|
||||
/**
|
||||
* 获取中文字符串的全拼(不带声调,空格分隔)
|
||||
* 例如: "张三" -> "zhang san"
|
||||
*/
|
||||
export function getFullPinyin(text: string): string {
|
||||
if (!text) return ''
|
||||
return pinyin(text, { toneType: 'none', type: 'array' }).join(' ')
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取中文字符串的全拼(不带声调,无空格)
|
||||
* 例如: "张三" -> "zhangsan"
|
||||
*/
|
||||
export function getFullPinyinNoSpace(text: string): string {
|
||||
if (!text) return ''
|
||||
return pinyin(text, { toneType: 'none', type: 'array' }).join('')
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取中文字符串的拼音首字母
|
||||
* 例如: "张三" -> "zs"
|
||||
*/
|
||||
export function getPinyinInitials(text: string): string {
|
||||
if (!text) return ''
|
||||
return pinyin(text, { pattern: 'first', toneType: 'none', type: 'array' }).join('')
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查查询字符串是否匹配目标文本(支持中文、全拼、首字母)
|
||||
* @param query 用户输入的查询字符串
|
||||
* @param target 目标文本(如成员姓名)
|
||||
* @returns 是否匹配
|
||||
*/
|
||||
export function matchesPinyin(query: string, target: string): boolean {
|
||||
if (!query || !target) return false
|
||||
|
||||
const lowerQuery = query.toLowerCase().trim()
|
||||
const lowerTarget = target.toLowerCase()
|
||||
|
||||
// 1. 直接匹配中文
|
||||
if (lowerTarget.includes(lowerQuery)) {
|
||||
return true
|
||||
}
|
||||
|
||||
// 2. 全拼匹配(无空格)
|
||||
const targetFullPinyin = getFullPinyinNoSpace(target).toLowerCase()
|
||||
if (targetFullPinyin.includes(lowerQuery)) {
|
||||
return true
|
||||
}
|
||||
|
||||
// 3. 首字母匹配
|
||||
const targetInitials = getPinyinInitials(target).toLowerCase()
|
||||
if (targetInitials.includes(lowerQuery)) {
|
||||
return true
|
||||
}
|
||||
|
||||
// 4. 全拼匹配(带空格,用于部分匹配)
|
||||
const targetFullPinyinSpaced = getFullPinyin(target).toLowerCase()
|
||||
if (targetFullPinyinSpaced.includes(lowerQuery)) {
|
||||
return true
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
Reference in New Issue
Block a user