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


以下代码均使用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;
}

将中文姓名转为拼音英文名的一种实现相关推荐

  1. 将MySQL中的中文姓名转为拼音

    一.首先设计好数据库表对应的实体类: Paper类: public class Paper {private String name; //论文题目private String firstAuthor ...

  2. python拼音名_实用小技巧,Python一秒将全部中文姓名转为拼音!

    有时在处理文件时候,我们需要将中文姓名转换为拼音,或者是转换为拼音首字母,本文将介绍三种Python实现的方法,最后给一个批量操作的代码案例!一.xpinyin 开门见山,Python中文字转拼音可以 ...

  3. python 拼音姓名排序_Python一秒将全部中文姓名转为拼音!

    有时在处理文件时候,我们需要将中文姓名转换为拼音,或者是转换为拼音首字母,本文将介绍三种Python实现的方法,最后给一个批量操作的代码案例! 一.xpinyin 开门见山,Python中文字转拼音可 ...

  4. python读取excel汉字转成拼音_Python语言之用Python将全部中文姓名转为拼音

    本文将介绍三种用Python将中文姓名转换为拼音的方法,Python的实用技巧希望对Python的学习有所帮助. 有时在处理文件时候,我们需要将中文姓名转换为拼音,或者是转换为拼音首字母,本文将介绍三 ...

  5. python 拼音姓名排序_实用小技巧,Python一秒将全部中文姓名转为拼音!

    有时在处理文件时候,我们需要将中文姓名转换为拼音,或者是转换为拼音首字母,本文将介绍三种Python实现的方法,最后给一个批量操作的代码案例! 一.xpinyin 开门见山,Python中文字转拼音可 ...

  6. PHP将中文字符转为拼音/首字母大写/或其他连接符

    PHP将中文字符转为拼音/首字母大写/或其他连接符 项目中遇到需要将客户的姓名转为首拼并且大写的要求, 提出解决办法 首先建立一个汉字转拼音的类 class PinYin {private $pyli ...

  7. Excel如何将姓名转为拼音并将姓和名分开显示

    如下图A列是一些人员姓名,现在想要将这些人名姓的拼音放在B列,名的拼音放在C列. 全选所有姓名数据单元格区域 点击下图选项(Excel工具箱,百度即可了解详细下载安装方法,本文这里不想详细解说) 点击 ...

  8. 各种正则校验规则:校验用户名正则,校验手机号,校验中文姓名,校验英文姓名,校验数字,校验银行卡,校验身份证号码,校验时间格式,校验 email(邮箱)

    火车车次 /^[GCDZTSPKXLY1-9]\d{1,4}$/ 手机机身码(IMEI) /^\d{15,17}$/ 必须带端口号的网址(或ip) /^((ht|f)tps?:\/\/)?[\w-]+ ...

  9. 将中文字符串转为拼音

    Maven依赖 <dependency><groupId>com.belerweb</groupId><artifactId>pinyin4j</ ...

  10. JAVA 中文字符转为拼音字符串

    项目上偶尔要用到关于中文字符串转换为拼音字符串的功能,pinyin4j.jar这个包可以提供相关的功能,非常方便,首先要在maven中pom.xml添加依赖项,如果不用maven,那直接下载对应的ja ...

最新文章

  1. http status 状态码汇总
  2. 遇到一个不得其解的问题。
  3. Kruscal算法---最小生成树
  4. matlab调和均值滤波_均值滤波和中值滤波的MATLAB实现
  5. GNSS-GNSS原理-GNSS星座介绍
  6. 实验三 交换机的配置
  7. php开发电脑i56200u,Intel Core i5-6200U性能跑分和评测 | ZMMOO
  8. simplest_ffmpeg_streamer加注释版
  9. 新物种爆炸:认知升级时代的新商业思维
  10. 误发邮件怎么办?发错邮件如何撤回?/
  11. 咋样回复计算机桌面删除的东西,电脑桌面上的便签怎么删除及桌面便签删除后还能恢复吗...
  12. Android使用Service播放音乐
  13. C语言单元测试---cunit(一) ---- 博客经典;
  14. 创业管理实战2021年秋(考试答案)
  15. bitset用法讲解
  16. Servlet[jsp]的Servlet.service()引发了具有根本原因的异常 (这个是什么情况?求解答)
  17. 盘一盘 Python 特别篇 19 - 天数计数|年限
  18. ios7版本 控件设置圆角
  19. 巴比特 | 元宇宙每日必读:盘点2022年全球元宇宙行业十大“闪光时刻”,2023年,元宇宙的发展机会又在哪里?...
  20. 优秀网址导航国内篇(更新于20170408)

热门文章

  1. SpringBoot电影网站源码(含数据库)
  2. splitcontainer控件固定Panel的大小
  3. 开心斗服务器维修要多久,大危机 《开心OL》史上最惨服务器开启?
  4. Netgear WNR2000v3刷固件记
  5. 电阻电感电容基本单位、读数、封装类型、种类
  6. echarts 生成 迁徙图_利用百度Echarts开发人口迁徙图(产品流向图)
  7. 阿里巴巴开源前端框架--Weex实践
  8. 关于BOM的一些基本知识以及表格的操作
  9. 防火墙服务器-iptables
  10. 电力系统自动化远程监控方案