将中文姓名转为拼音英文名的一种实现

news/2024/11/7 0:23:16/

需要将中文名转为英文名,这里需要考虑到姓氏以及名字多音字选择,这里记录一下我实现的一种思路。


以下代码均使用JS来进行说明。


处理流程

首先需要判断名字长度以及名字规范

//中文名格式验证
verifyName: function(str) {let re = /[^\u4e00-\u9fa5]/;const isChinese = str => !re.test(str);if (!isChinese(str) || str.length < 2) {return false;}return true;
},

当名字长度超过两个子的时候需要判断复姓的情况,如名字为欧阳日天,那么需要询问用户姓氏为欧阳还是欧,这里只能通过提前预备所有的复姓列表进行检测。

这里提供一份我自己整理的复姓列表,下面的doubleFamilyName就是复姓列表数组

我声明一个this.isDoubleFamilyName用来标记是否为复姓的标记,默认为0,如果是复姓则2,单姓为1,这里是处理逻辑

if (str.length > 2 && doubleFamilyName.indexOf(str.substr(0, 2)) > -1) {//这里可以通过一个弹窗来提示用户选择//然后根据用户选择来设置this.isDoubleFamilyName的值
} else {this.isDoubleFamilyName = 1;
}

接下来需要判断名字中的多音字,注意这里的多音字是指拼写不同,音调不同的忽略。这里需要借助第三方的库来将汉字转为拼音,我使用的是在github上找的一个库,仓库地址在这里,使用方法很简单

import pinyin from 'pinyin';
//获取这个字符串的全部读音
//得到一个二维数组
//数据格式如[ [ 'zhang', 'zhong' ], [ 'xin' ] ,['liu','ni']]
this.py = pinyin(str, {heteronym: true,	//打开多音字style: pinyin.STYLE_NORMAL	//注音不加声调
});
let py = this.py; 	//这里存全局变量是为了后面可以复用

这里声明一个this.nameSpell用来保存最后的每个字的读音数组

考虑到实际使用中文名转英文名都是转为全大写,这里我也使用了toUpperCase()方法来转换,如不需要自己手动去除这个方法即可

if (py.some(i => i.length > 1)) {	//判断这个二维数组中是否有哪一项含有多音字//这里让用户选择具体的读音并赋值给this.nameSpell//这里涉及到一个排列组合的问题,具体代码可以参考博客底部的代码参考
} else {this.nameSpell = py.map(i => i[0].toUpperCase());
}

现在我们已经将最后的整个拼音方案获取到this.nameSpell,接下来就是处理姓和名的分割了。这里使用this.firstNamethis.lastName分别保存。

if (this.nameSpell.length > 0) {if (this.isDoubleFamilyName == 2) {this.lastName = this.nameSpell[0] + this.nameSpell[1];this.firstName = this.nameSpell.slice(2).join('');} else if (this.isDoubleFamilyName == 1) {this.lastName = this.nameSpell[0];this.firstName = this.nameSpell.slice(1).join('');}
}

到此我们已经完成整个从中文名转为英文名的过程。

代码参考

二维数组的排列组合

/** 
* 传入一个二维数组,如[ [ 'zhang', 'zhong' ], [ 'xin' ] ,['liu']]
* 返回[['zhang','xin','liu'],['zhong','xin','liu']]
*/
function(py) {let lengthArr = [];let productArr = [];let result = [];let length = 1;for (let i = 0; i < py.length; i++) {let len = py[i].length;lengthArr.push(len);let product = i === 0 ? 1 : py[i - 1].length * productArr[i - 1];productArr.push(product);length *= len;}for (let i = 0; i < length; i++) {let resultItem = [];for (let j = 0; j < py.length; j++) {resultItem.push(py[j][Math.floor(i / productArr[j]) % lengthArr[j]].toUpperCase());}result.push(resultItem);}return result;
}

http://www.ppmy.cn/news/634444.html

相关文章

css的中文名称是,CSS 中文字体的英文名称

宋体 SimSun 黑体 SimHei 微软雅黑 Microsoft YaHei 微软正黑体 Microsoft JhengHei 新宋体 NSimSun 新细明体 PMingLiU 细明体 MingLiU 标楷体 DFKai-SB 仿宋 FangSong 楷体 KaiTi 仿宋_GB2312 FangSong_GB2312 楷体_GB2312 KaiTi_GB2312 宋体&#xff1a;SimSuncss中中文字体…

粤教版用计算机写作文教学设计,粤教版第7课 用计算机写 作文 教学设计

第 7 课 用计算机写作文 教学设计 1 教学目标 知识与技能: (1)认识 Word 的工作窗口。掌握 word 文件的保存与退出方法。 (2)学会用只能 ABC 输入法输入单个汉字的方法。 (3)知道输入法的切换方式。 (4)在学生输入汉字的过程中,进一步加强键盘指法的训练。 过程与方法: (1)在教…

中国人在发表英文论文时汉字姓名究竟应该如何写?

相信&#xff0c;这是各位在投稿英文刊物时碰到的一个现实问题。当然很多人觉得没有什么问题&#xff0c;已经在有意无意、自然不自然地用一些不知道规范与否的汉语拼音转化为的英文代码了。但是&#xff0c;如果认真考察一下&#xff0c;发现还是存在许多问题的。本文就是想针…

用计算机写作文的好处,《用计算机写作文》教案

课题&#xff1a;用计算机写作文 一、教学内容分析 本节内容是广东省出版社出版的广东省小学课本《信息技术》第一册(下)的第七课《用计算机写作文》。本节是学习word的第一课&#xff0c;是学生学习中文输入的基础。此前学生已经学习了使用键盘打字的正确指法和用记事本输入英…

16.Spring管理数据源

Spring管理数据源 Spring管理数据源 将数据源(dateSource)交给IOC容器进行管理&#xff0c;最终去实现Spring整合MyBatis 引入依赖 <!-- 数据源 --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><vers…

mysql中文表头转为英文字名_中文名字转换英文名字

姓名是每个人特定的名称符号,是通过语言文字信息区别人群的标志,中国人对姓名十分珍视,因为不仅包含了父母的期望和情意,还延续了家族血脉的传承。所以很多人取英文名也会融入中文名,以此彰显自己的特色。取英文名本身很时尚洋气,又能便于学习英文和进行交流,英文名的存…

参考文献中英文人名_参考文献英文名字应该怎么写?

展开全部 名字的缩写,学位的缩写只有PhD,MD,BD等,英文文献好像是不标学位的。 对于英文参考文献,还应注意以e5a48de588b662616964757a686964616f31333431363664下两点: 1、作者姓名采用“姓在前名在后”原则,具体格式是:姓,名字的首字母。 如:MalcolmRichardCowley为:…

AI智慧安监EasyCVR平台长时间运行出现协程高的现象是什么原因?

EasyCVR视频融合平台基于云边端协同架构&#xff0c;具有强大的数据接入、处理及分发能力&#xff0c;平台支持海量视频汇聚管理&#xff0c;可支持多协议接入&#xff0c;包括市场主流标准协议与厂家私有协议及SDK&#xff0c;如&#xff1a;国标GB28181、RTMP、RTSP/Onvif、海…