zdtap-uniapp-main/utils/js-pinyin.js

109 lines
5.6 KiB
JavaScript

/**
* js-pinyin
* 一个轻量级的汉字转拼音工具
*/
const Pinyin = {
/**
* 拼音首字母字典
*/
_pyFirstLetters: {},
/**
* 拼音字典
*/
_pyDict: {},
/**
* 配置选项
*/
_options: {
checkPolyphone: false, // 是否检查多音字
charCase: 0 // 0-小写, 1-大写
},
/**
* 设置配置选项
* @param {Object} options 配置选项
*/
setOptions(options) {
Object.assign(this._options, options)
},
/**
* 获取汉字的拼音首字母
* @param {String} str 需要转换的汉字
* @returns {String} 拼音首字母
*/
getFirstLetter(str) {
if (typeof str !== 'string') return str
const result = this.getFullChars(str)
return result.charAt(0)
},
/**
* 获取汉字的完整拼音
* @param {String} str 需要转换的汉字
* @returns {String} 完整拼音
*/
getFullChars(str) {
if (typeof str !== 'string') return str
let result = ''
for (let i = 0, len = str.length; i < len; i++) {
const ch = str.charAt(i)
if (ch.charCodeAt(0) > 127) {
// 汉字处理
result += this._getChar(ch)
} else {
// 非汉字处理
result += this._options.charCase ? ch.toUpperCase() : ch.toLowerCase()
}
}
return result
},
/**
* 获取单个汉字的拼音
* @private
* @param {String} ch 单个汉字
* @returns {String} 拼音
*/
_getChar(ch) {
const hash = ch.charCodeAt(0)
// 处理空格
if (hash === 32) return ' '
// 处理特殊字符
if (hash < 127) return ch
// 使用常用汉字拼音映射表
const pinyinMap = {
'阿': 'a', '啊': 'a', '埃': 'ai', '艾': 'ai', '爱': 'ai', '安': 'an', '奥': 'ao', '澳': 'ao',
'巴': 'ba', '白': 'bai', '百': 'bai', '班': 'ban', '邦': 'bang', '包': 'bao', '北': 'bei', '本': 'ben', '必': 'bi', '冰': 'bing', '博': 'bo', '不': 'bu',
'草': 'cao', '册': 'ce', '测': 'ce', '层': 'ceng', '茶': 'cha', '查': 'cha', '长': 'chang', '成': 'cheng', '城': 'cheng', '池': 'chi', '出': 'chu', '川': 'chuan',
'大': 'da', '达': 'da', '答': 'da', '代': 'dai', '带': 'dai', '单': 'dan', '但': 'dan', '东': 'dong', '都': 'du', '度': 'du', '端': 'duan', '对': 'dui',
'饿': 'e', '恩': 'en', '而': 'er', '尔': 'er', '耳': 'er',
'发': 'fa', '法': 'fa', '番': 'fan', '方': 'fang', '风': 'feng', '封': 'feng', '福': 'fu', '府': 'fu', '富': 'fu', '复': 'fu', '父': 'fu', '付': 'fu',
'改': 'gai', '干': 'gan', '甘': 'gan', '刚': 'gang', '高': 'gao', '格': 'ge', '工': 'gong', '古': 'gu', '谷': 'gu', '光': 'guang', '广': 'guang', '贵': 'gui',
'哈': 'ha', '海': 'hai', '含': 'han', '汉': 'han', '好': 'hao', '号': 'hao', '河': 'he', '黑': 'hei', '恒': 'heng', '红': 'hong', '后': 'hou', '湖': 'hu', '华': 'hua', '环': 'huan',
'击': 'ji', '及': 'ji', '极': 'ji', '急': 'ji', '集': 'ji', '几': 'ji', '己': 'ji', '家': 'jia', '建': 'jian', '江': 'jiang', '交': 'jiao', '金': 'jin', '京': 'jing', '九': 'jiu', '居': 'ju',
'卡': 'ka', '开': 'kai', '看': 'kan', '康': 'kang', '科': 'ke', '可': 'ke', '空': 'kong', '口': 'kou', '快': 'kuai', '宽': 'kuan',
'拉': 'la', '来': 'lai', '蓝': 'lan', '老': 'lao', '乐': 'le', '雷': 'lei', '冷': 'leng', '里': 'li', '立': 'li', '联': 'lian', '良': 'liang', '龙': 'long', '路': 'lu', '露': 'lu',
'妈': 'ma', '马': 'ma', '买': 'mai', '卖': 'mai', '满': 'man', '猫': 'mao', '么': 'me', '美': 'mei', '梦': 'meng', '米': 'mi', '面': 'mian', '民': 'min', '明': 'ming',
'拿': 'na', '那': 'na', '奶': 'nai', '南': 'nan', '能': 'neng', '你': 'ni', '年': 'nian', '宁': 'ning', '农': 'nong', '女': 'nv',
'哦': 'o', '藕': 'ou',
'爬': 'pa', '拍': 'pai', '盘': 'pan', '乓': 'pang', '跑': 'pao', '配': 'pei', '朋': 'peng', '品': 'pin', '平': 'ping', '普': 'pu',
'七': 'qi', '起': 'qi', '气': 'qi', '千': 'qian', '前': 'qian', '桥': 'qiao', '亲': 'qin', '青': 'qing', '轻': 'qing', '清': 'qing', '情': 'qing', '庆': 'qing', '秋': 'qiu', '区': 'qu', '全': 'quan',
'然': 'ran', '让': 'rang', '热': 're', '人': 'ren', '日': 'ri', '容': 'rong', '如': 'ru', '瑞': 'rui', '润': 'run',
'撒': 'sa', '赛': 'sai', '三': 'san', '色': 'se', '森': 'sen', '杀': 'sha', '山': 'shan', '上': 'shang', '尚': 'shang', '少': 'shao', '深': 'shen', '生': 'sheng', '时': 'shi', '世': 'shi', '市': 'shi', '事': 'shi', '是': 'shi', '首': 'shou', '水': 'shui', '顺': 'shun',
'他': 'ta', '她': 'ta', '台': 'tai', '太': 'tai', '谈': 'tan', '汤': 'tang', '套': 'tao', '特': 'te', '天': 'tian', '田': 'tian', '通': 'tong',
'哇': 'wa', '外': 'wai', '完': 'wan', '王': 'wang', '为': 'wei', '文': 'wen', '我': 'wo', '屋': 'wu', '五': 'wu', '武': 'wu',
'西': 'xi', '息': 'xi', '夏': 'xia', '先': 'xian', '香': 'xiang', '想': 'xiang', '小': 'xiao', '新': 'xin', '信': 'xin', '星': 'xing', '兴': 'xing', '雪': 'xue', '学': 'xue',
'亚': 'ya', '烟': 'yan', '燕': 'yan', '羊': 'yang', '样': 'yang', '要': 'yao', '也': 'ye', '一': 'yi', '以': 'yi', '意': 'yi', '益': 'yi', '英': 'ying', '永': 'yong', '优': 'you', '游': 'you', '渝': 'yu', '元': 'yuan',
'杂': 'za', '在': 'zai', '咋': 'za', '早': 'zao', '泽': 'ze', '怎': 'zen', '增': 'zeng', '扎': 'zha', '展': 'zhan', '张': 'zhang', '章': 'zhang', '招': 'zhao', '真': 'zhen', '正': 'zheng', '之': 'zhi', '中': 'zhong', '州': 'zhou', '主': 'zhu', '专': 'zhuan', '子': 'zi', '自': 'zi'
}
return pinyinMap[ch] || 'unknown'
}
}
export default Pinyin