纯js实现简单的汉语转字母
来源:互联网 发布:centos ftp没找到 编辑:程序博客网 时间:2024/06/10 23:38
实用场景:
列表的筛选,如利用拼音全拼或首拼查询中文汉字
基本实现思路:
汉字有21个声母:b, p, m, f, d, t, n, l, g, k, h, j, q, x, zh, ch, sh, r, z, c, s有韵母24个,其中单韵母有6个:a, o, e, i, u, v, 复韵母有18个:ai , ei, ui , ao, ou, iu , ie, ve, er, an , en , in, un , vn , ang, eng, ing , ong假设声母和韵母两两组合的话,会有24X21=504种组合,实际情况是有些组合是没有意义的,比如zv, zie, zve等,去除这部分后,还剩余401种;这就为对象枚举的实现提供了可能,结合unicode编码表,创建一个拼音与unicode的映射对象。
代码实现:
创建映射对象:“PinYin”
var PinYin = { "a": "\u554a\u963f\u9515", "ai": "\u57c3\u6328\u54ce\u5509\u54c0\u7691\u764c\u853c\u77ee\u827e\u788d\u7231\u9698\u8bf6\u6371\u55f3\u55cc\u5ad2\u7477\u66a7\u7839\u953f\u972d", "an": "\u978d\u6c28\u5b89\u4ffa\u6309\u6697\u5cb8\u80fa\u6848\u8c19\u57ef\u63de\u72b4\u5eb5\u6849\u94f5\u9e4c\u9878\u9eef", …… …… …… "nou": "\u8028", "fou": "\u7f36", "bia": "\u9adf" };
定义转换接口ConvertPinyin(“中文汉字”):
function ConvertPinyin(l1) { var l2 = l1.length; var I1 = ""; var reg = new RegExp('[a-zA-Z0-9\- ]'); for (var i = 0; i < l2; i++) { var val = l1.substr(i, 1); //利用映射对象逐字进行转换 var name = arraySearch(val, PinYin); if (reg.test(val)) { I1 += val; } else if (name !== false) { I1 += name; } } //若存在空格用“-”代替 I1 = I1.replace(/ /g, '-'); while (I1.indexOf('--') > 0) { I1 = I1.replace('--', '-'); } return I1; }
定义逐字转换方法:arraySearch("汉字",“映射对象”):
function arraySearch(l1, l2) { for (var name in PinYin) { if (PinYin[name].indexOf(l1) != -1) { return ucfirst(name); break; } } return false; }
定义首字母大写方法:ucfirst():
function ucfirst(l1) { if (l1.length > 0) { var first = l1.substr(0, 1).toUpperCase(); var spare = l1.substr(1, l1.length); return first + spare; // return first; } }
ps:可根据需求选择是否需要,例如在利用拼音首拼查询时,可利用大写识别首拼
存在的不足:
1. 拼音汉字搜索不全,无法识别生僻字,繁体字等,如“呉”(可以通过添加unicode编码自主补全)2. 无法识别多音字,只能识别一个音3. 文件较大问题:汉拼转换依赖unicode编码,所以转换文件js大部分都是unicode,尝试压缩后还有45kb的大小
阅读全文
0 0
- 纯js实现简单的汉语转字母
- 纯JS实现简单的分页功能
- 纯JS实现的简单tab选项卡切换效果
- 来试试纯汉语中文的计算器~
- js实现用户输入的小写字母自动转大写字母
- js汉语转拼音方法
- 纯简单JS分页
- 纯js简单日历
- 最简单的纯js实现点击展开二级菜单功能
- Java简单实现汉语词频统计
- android字母导航条的简单实现
- 自己封装的纯js实现ajax
- 纯js实现的软键盘
- 纯js实现的科学计算器
- JavaScript_纯Js实现的Ajax
- 纯java实现简单的webservice方式
- 纯jsp实现简单的个人博客
- html2canvas 实现纯JS网页截图简单例子
- Android三种姿势带你玩转360度全景图功能
- codeforces 259-B. Little Elephant and Magic Square(数学)
- 美团编程题
- 明远智睿IMX6Q Android4.4.2移植USBWIFI(RTL8188EUS)
- java中volatile关键字的含义
- 纯js实现简单的汉语转字母
- hdu1878-判断欧拉回路-欧拉回路
- union的特殊用途
- Android多渠道打包汇总(二)—— 使用AS进行签名打包
- GStree介绍
- memcached
- 有趣的Java-J01
- RobotFramework自动化测试框架系统关键字之断言
- 父页面上取<iframe>内容元素