最近工作中接到了一个需求:一个项目列表,项目名称可能有中文可能有英文,如果是中文的话,需要实现用户输入项目的拼音即可筛选到对应项目的功能。

完成了之后觉得可以在公众号里给大家分享一下,给有需要的人一个参考吧。

项目框架用的是react,所以先creat-react-app

比如create-react-app pinyin

渲染选择框的组件用的是antd的Select组件,所以需要先引入antd,具体引入的方法参照antd官方文档,已经写得很清楚了

以上准备工作做好后,目前的目录结构应该如下图所示:

├── README.md

├── package.json

├── package-lock.json

├── config-overrides.js

├── public

│    ├── favicon.ico

│    ├──index.html

└── manifest.json

├── src

│   ├── App.css

│   ├── App.js

│   ├── App.test.js

│   ├── index.css

│   ├── index.js

│   ├──logo.svg

│   └── registerServiceWorker.js

现在在src文件夹下新建一个components文件夹,components文件夹中新建一个SelectPinYin文件夹,SelectPinYin文件夹下新建一个index.js和PinYin.js

PinYin.js文件中主要放置拼音和各个拼音对应的中文字符串,方便组件调用

PinYin.js

export const SimplePinYin = {

py: [

[ 'a','阿啊呵腌吖锕啊呵嗄啊呵啊呵阿啊呵' ],

[ 'ai','哀挨埃唉哎捱锿呆挨癌皑捱矮哎蔼霭嗳爱碍艾唉哎隘暧嗳瑷嗌嫒砹' ],

[ 'an','安谙鞍氨庵桉鹌厂俺铵揞埯案按暗岸黯胺犴' ],

[ 'ang','肮昂盎' ],

[ 'ao','熬凹熬敖嚣嗷鏖鳌翱獒聱螯廒遨袄拗媪奥澳傲懊坳拗骜岙鏊' ],

[ 'ba','八吧巴叭芭扒疤笆粑岜捌八拔跋茇菝魃把靶钯把爸罢霸坝耙灞鲅吧罢' ],

[ 'bai','掰白百摆伯柏佰捭败拜呗稗' ],

[ 'ban','般班搬斑颁扳瘢癍版板阪坂钣舨办半伴扮瓣拌绊' ],

[ 'bang','帮邦浜梆膀榜绑棒膀傍磅谤镑蚌蒡' ],

[ 'bao','包胞炮剥褒苞孢煲龅薄雹保宝饱堡葆褓鸨报暴抱爆鲍曝刨瀑豹趵' ],

[ 'bei','背悲杯碑卑陂埤萆鹎北被备背辈倍贝蓓惫悖狈焙邶钡孛碚褙鐾鞴臂呗' ],

...

]

}

内容太多,只能复制这样一小部分,其余部分可以参考下面这条链接,然后改成上面那种格式就可以了。

http://www.cnblogs.com/meteoric_cry/p/5954547.html

index.js

接下来开始写组件

把需要的内容引用进来

用antd的Select组件渲染选择框,filterOption是Select自带的方法,传入两个参数input和option,ilterOption会接收 inputValue,option 两个参数,当 option 符合筛选条件时,应返回 true,反之则返回 false

要做到拼音搜索匹配到中文,所以调用this.selectPinYin函数,下面开始写selectPinYin函数

以input的内容分为两类,input的ASCⅡ码在32和126之间,表示输入的内容是字母(包括大小写)、空格、标点符号等。如果不在32和126之间,就默认输入的是中文,可以不对option做处理

当input为中文时:

return option.props.children.toLowerCase().indexOf( input.toLowerCase() ) >= 0;

当input为字母时:

const value = option.props.children.toLowerCase().split( '' );

const newValue = value.map( item => this.chineseChangePY( item ) ).join( '' );

return newValue.indexOf( input.toLowerCase() ) >= 0;

思路:

①    将列表中的每项内容,即option.props.children转成小写(万一不全是中文),然后进行分割,split('')把字符串转成数组

②    遍历得到的数组,并把每一个元素传递给chineseChangePY函数

③    chineseChangePY函数的作用:如果元素不是中文,直接返回;如果是中文,遍历PinYin.js中的数组,与每个子数组的第二个元素即中文字符串对比,如果元素在这个中文字符串里,返回中文字符串所在数组的第一个元素,即所需要的拼音

④    将处理过的数组转成字符串

⑤    和input进行对比,存在返回true,不存在返回false

App.js

引用写好的SelectPinYin组件

效果

bug说明:比如遇到生僻字的时候,PinYin.js中没有收录进这个中文,就无法匹配。比如遇到多音字的时候,“藏”:既可以cang也可以zang,cang排在zang前面,当遍历匹配的时候遇到cang就已经返回了,所以如果有用户输入zang就匹配不到藏字。

如果有更好的方法,欢迎讨论交流。

python 拼音搜索中文_JS实现输入拼音搜索中文列表相关推荐

  1. UITextView 打入中文时,输入拼音会调用 textViewDidChange: 回调的解决方案

    UITextView 打入中文时,输入拼音会调用 textViewDidChange: 回调的解决方案 参考文章: (1)UITextView 打入中文时,输入拼音会调用 textViewDidCha ...

  2. 微信小程序input搜索解决中文问题(输入拼音) 实时搜索节流处理(bindinput 节流)

    微信小程序input搜索解决中文问题(输入拼音) & 实时搜索节流处理(bindinput 节流) 问题 微信小程序输入拼音的时候, 还没有完全输入完成, bindinput就会触发, 当我输 ...

  3. 阻止中文输入法输入拼音的时候触发input事件

    阻止中文输入法输入拼音的时候触发input事件 前言 最近看element-ui源码的时候看到el-input发现的.这个少见的事件. compositionstart.compositionend事 ...

  4. 实时监听textField输入中文内容的时候拼音,拼音不跟着响应

    实时监听textField输入中文内容的时候拼音,拼音不跟着响应 - (void)viewDidLoad {[super viewDidLoad];UITextField *textField = [ ...

  5. 李亚涛:python中文如何转换成拼音?

    大家好,今天给大家分享一个我之前写程序遇到的一个问题,就是我在采集某房产信息的时候,由于字段非常多,有将近100多个,而且很多字段是相互关联的 我采集是直接导入到数据库,为了防止重复,以及设置一个唯一 ...

  6. Ubuntu Budgie 22.04 设置中文语言并安装拼音输入法

    之前将ubuntu server 22.04 安装了 Budgie Desktop 桌面环境,系统语言是英文的,如果要作为桌面使用还有些不适应,我们要如何将系统语言切换为中文并支持中文输入呢? 接下来 ...

  7. javascript实现下拉列表框显示(输入拼音头显示选项)

    客户提出输入拼音头,下拉列表框打开,焦点在拼音头为对按下字母的那条子项上按回车键则选中此子项.这点如同在OICQ中搜索名字,按下一个字母键,则第一个字母为此字母的单词或汉字就为当前的选项.还有,如:在 ...

  8. JS获取中文拼音首字母,并通过拼音首字母高速查找页面内的中文内容

    实现效果: 图一: 图二: 此例中输入的中文字符串"万万保重",有三个字是多音字.所以alert对话框中显示的是多种读音的组合. 怎样实现? 怎样实现通过拼音首字母高速查找页面内的 ...

  9. JS获取中文拼音首字母,并通过拼音首字母快速查找页面内的中文内容

    实现效果: 图一: 图二: 此例中输入的中文字符串"万万保重",有三个字是多音字,所以alert对话框中显示的是多种读音的组合: 如何实现? 如何实现通过拼音首字母快速查找页面内的 ...

  10. 使用Microsoft Visual Studio International Pack获得中文字符串的所有拼音组合(处理多音字)...

    最近一个项目中客户需要做人名的拼音检索,就像QQ好友那样,输入拼音就提示符合的联系人.上网找了一下,发现微软已经发布了相关的支持库,不仅可以处理拼音,还能处理笔画.简繁体转换等.csdn上有一篇博客介 ...

最新文章

  1. bash shell的一些基本概念
  2. Apache Flink 在实时金融数据湖的应用
  3. Set集合以及HashSet、LinkedHashSet、TreeSet等讲解
  4. 一款超强的手机屏幕投影工具
  5. Python——列表中存放字典遇到的问题
  6. 详细分析 Chrome V8 JIT 漏洞 CVE-2021-21220
  7. Matlab关联m文件与m文件关联设置
  8. jar的MANIFEST.MF配置了Class-Path, java -classpath设置无效
  9. 《The Django Book 2.0》中文版笔记
  10. Java 有序的Map —— LinkedHashMap
  11. GIS基本理论之四:空间数据分析基本理论
  12. 山东法律学校97级二班计算机班,关于表彰全国三好学生、全国优秀学生干部和全国先进班集体及其标兵的决定...
  13. 苹果怎么用测试软件,iPhone 也能测量身高教你怎么用 iOS「测距仪」App
  14. JavaSE基础笔记——JOptionPane编写员工管理系统;GUI使用;写一个超级数组
  15. Python 灰帽子笔记之调试器
  16. java中的\uxxxx
  17. gr-osmosdr支持GNURadio的扩展
  18. webpack多环境(dev stg prd qa)打包问题 1
  19. 在游戏策划中应用SCAMPER创新
  20. 大规模土地利用数据处理新手段:高性能的地理处理建模

热门文章

  1. TIA安装GSD文件
  2. 负一的n次方c语言,c语言 10 负次方
  3. yunu.php,1.1 本地安装云优
  4. matlab没有vs2010,matlab2010a在mbuild时找不到vs2010的解决办法
  5. java 多线程面试题及答案
  6. 六大场景,看懂声纹识别技术怎样“抗疫防疫” 小快
  7. 深度访谈: 怎样玩转天猫?看这九本书就够了
  8. STM8S003F3 PWM的使用
  9. 解决Wireshark安装Npcap组件失败
  10. 104规约(持续更新....)