匹配到所有中文
了解一下下unicode编码#
Unicode(中文:万国码、国际码、统一码、单一码)是电脑科学领域里的一项业界标准。它对世界上大部分的文字系统进行了整理、编码,使得电脑可以用更为简单的方式来呈现和处理文字。 Unicode 伴随著通用字符集的标准而发展,同时也以书本的形式[1]对外发表。Unicode 至今仍在不断增修,每个新版本都加入更多新的字符。目前最新的版本为2019年5月公布的12.1.0[2],已经收录超过13万个字符(第十万个字符在2005年获采纳)。Unicode涵盖的资料除了视觉上的字形、编码方法、标准的字符编码外,还包含了字符特性,如大小写字母。引用至《维基百科》
为什么有这篇文章#
当然是掉坑里头了。前两天做了一个表单,姓名一栏只允许填入中文。
javascript
复制代码
name.value.replace(/[^\u4e00-\u9fa5]/g, '')
代码提测,本着我的代码不可能会有bug的态度下班了。晚上钉钉一阵一阵的的响。测试老哥说:哥,有bug。 我心里想:有bug?开什么玩笑,你是不是不会用?问他:哪bug了? 姓名一栏可以输入中文。 我差点发火,这不是质疑我的代码了吗。刚要反驳不可能。 测试老哥顺手丢过来两字:龿龿 说:你自己试试。
javascript
复制代码
'龿龿'.replace(/[\u4e00-\u9fa5]/g, '') //"龿龿"
嗯,怎么匹配不到?
[\u4e00-\u9fa5]有什么用#
javascript采用的是utf-16 的编码方案,就是两个字节,unicode 的表现形式就是 \uxxxx 。使用[\u4e00-\u9fa5]匹配中文,\u4e00 是unicode中第一个汉字的码点,\u9fa5 是unicode中最后一个汉字的码点。
arduino
复制代码
'\u4e00' // '一' '\u95a5' // '龥'
不过显然,最后一个码点似乎不对了。 查阅各版本unicode数据文档发现:
复制代码
6.2-7.0 \u4e00 - \u9fcc 8.0-9.0 \u4e00 - \u9fd5 10.0 \u4e00 - \u9fea 11.0-12.1 \4e00 - \u9fef 13.0 \4e00 - \u9ffc 14.0-15.0 \4e00 - \u9fff
没看见 \u9fa5 从那个版本开始的,但至少8.0版本后,中文的最后一个码点移动到了 \u9fd5 。
更正的中文匹配方式 [\u4e00-\u9fff]#
javascript
复制代码
'龿龿'.replace(/[\u4e00-\u9fff]/g, '') // '' '你会不认识这几个字龦龯龿'.replace(/[\u4e00-\u9fff]/g, '') // ''
万能的中文匹配方式 /\p{sc=Han}/gu#
javascript
复制代码
'龿龿'.replace(/\p{sc=Han}/gu, '') // '' '你会不认识这几个字龦龯龿'.replace(/\p{sc=Han}/gu, '') // ''
补充#
文档数据可以在unicode官网查看:
作者:whh666
出处:https://www.cnblogs.com/whh666/p/17682619.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
2021-09-06 echarts堆叠柱状图