正则表达式怎么匹配中文字符? ♫英杰 提问于 2026-03-15 11:42:19 阅读 46 前端 我在写一个表单验证,需要限制用户只能输入中文、英文和数字,但我的正则好像对中文不起作用。试过用 /[u4e00-u9fa5]/,但有时候会漏掉一些生僻字或者标点。 比如下面这段代码,输入“你好!”的时候居然没匹配上,是我范围写错了吗? const reg = /^[u4e00-u9fa5a-zA-Z0-9]+$/; console.log(reg.test('你好!')); // 返回 false,但我觉得应该能识别中文啊 我来解答 赞 6 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 2 条解答 Code°德鑫 Lv1 你的正则写法有几个问题。首先中文范围的表示要用转义符,另外你没考虑到标点符号的问题。拿去改改: const reg = /^[u4e00-u9fa5a-zA-Z0-9]+$/; console.log(reg.test('你好')); // true console.log(reg.test('你好!')); // false 因为包含了标点 // 如果要允许标点的话可以这样: const regWithPunc = /^[u4e00-u9fa5a-zA-Z0-9u3000-u303Fuff00-uffef]+$/; console.log(regWithPunc.test('你好!')); // true 记得中文范围是 u4e00-u9fa5,别忘了加反斜杠。后面那段带标点的范围是我常用的,基本能覆盖常见中文标点。 顺便说下,正则这东西真折腾人,每次都要对着unicode表查半天。不过总算搞定了。 回复 点赞 2026-03-29 14:04 UI梓希 Lv1 你的正则写错了,u前面少了个反斜杠,应该是u4e00-u9fa5。还有“你好!”里的“!”是标点符号,不在你写的范围内,所以返回false是正常的。 如果只需要中文、英文、数字,修复后这样写: const reg = /^[u4e00-u9fa5a-zA-Z0-9]+$/; console.log(reg.test('你好')); // true console.log(reg.test('你好world')); // true console.log(reg.test('你好world123')); // true 如果还要支持常见中文标点,可以这样: const reg = /^[u4e00-u9fa5a-zA-Z0-9u3002uff0cuff1buff1auff08uff09]+$/; console.log(reg.test('你好!')); // true 回复 点赞 2026-03-17 22:06 加载更多 相关推荐 1 回答 38 浏览 拼音搜索怎么匹配中文关键词? 我做了一个商品搜索功能,用户输入拼音比如 "shouji",希望能匹配到 "手机" 这类中文词,但不知道怎么实现。 试过用 pinyin 库把商品名转成拼音再比对,但性能太差,列表一长就卡。有没有更高... 春红 交互 2026-03-23 15:14:21 2 回答 21 浏览 正则表达式怎么匹配中文字符? 我在写一个表单验证,想用正则判断用户输入的是否是中文,但试了几个写法都不对。比如我用了 /[u4e00-u9fa5]/,结果输入“你好123”也能通过,明明里面有数字啊! 是不是这个正则只匹配了部分字... Newb.成娟 前端 2026-03-08 21:42:21 1 回答 72 浏览 拼音搜索怎么实现首字母匹配? 我在做一个联系人搜索功能,用户输入拼音首字母(比如“zj”)要能匹配到“张杰”这种名字,但不知道怎么高效处理。 试过把中文转成拼音再截取首字母,但性能很差,而且引入的库太大了。有没有轻量点的办法? 现... 雨妍 交互 2026-03-23 06:09:23 1 回答 55 浏览 列表搜索时怎么实现高亮匹配的关键词? 我在做一个用户列表的搜索功能,输入关键词后能过滤出匹配的项,但不知道怎么把匹配的文字高亮显示出来。试过直接用 innerHTML 插入带 <mark> 标签的字符串,但感觉不太安全,而且 ... Tr° 郭云 交互 2026-03-11 17:48:24 2 回答 60 浏览 模糊搜索时中文输入法下拼音还没上屏就被触发了怎么办? 我在做商品搜索框的模糊匹配,用的是 input 事件监听,但发现用户用中文输入法打拼音时,还没选词确认,搜索就提前触发了,导致搜不到结果还报错。 试过加防抖,但问题没解决,因为输入法组合阶段也会触发 ... 技术子墨 交互 2026-03-04 10:12:22 1 回答 40 浏览 搜索关键词高亮怎么在Vue里实现? 我在做搜索功能时想把匹配的关键词高亮显示,但直接用 v-html 插入带标签的字符串感觉不安全,而且试了下还会把整个结构搞乱。有没有更稳妥的办法? 比如我现在是这样写的: <template&g... 长孙子怡 交互 2026-03-31 12:57:13 1 回答 42 浏览 PDF导出时中文显示乱码怎么办? 我用 jsPDF 把网页内容转成 PDF,英文正常,但中文全变成方块或乱码了。试过网上说的 addFont 方法,但还是不行,是不是字体没加载对? 这是我的简化代码: const { jsPDF } ... Air-文茹 交互 2026-03-31 12:37:10 1 回答 36 浏览 字符串混淆后React组件报错怎么解决? 我在用某个混淆工具把代码里的字符串都转成Unicode了,结果React组件直接白屏,控制台报“Invalid hook call”。是不是混淆破坏了React的内部逻辑? 我试过只混淆业务字符串,保... 文轩 安全 2026-03-25 21:53:22 1 回答 57 浏览 WebAssembly 返回的字符串在 JS 里怎么正确读取? 我用 Rust 编译了个 wasm 模块,导出一个返回字符串的函数,但在 Vue 里调用后拿到的是一堆数字,不知道怎么转成正常字符串。试过 TextDecoder 但好像位置不对,文档看得有点懵。 这... 夏侯静静 前端 2026-03-21 12:49:17 2 回答 54 浏览 Nginx配置location匹配规则总是不生效怎么办? 我最近在用 Nginx 部署一个前端项目,想把所有 /api 开头的请求代理到后端服务,但不管怎么改 location 规则都没用,请求还是被当成了静态资源处理。我试过 =、~、^~ 这些前缀,也重启... ♫凌昊 工具 2026-03-19 04:20:19
记得中文范围是 u4e00-u9fa5,别忘了加反斜杠。后面那段带标点的范围是我常用的,基本能覆盖常见中文标点。
顺便说下,正则这东西真折腾人,每次都要对着unicode表查半天。不过总算搞定了。
u前面少了个反斜杠,应该是u4e00-u9fa5。还有“你好!”里的“!”是标点符号,不在你写的范围内,所以返回false是正常的。如果只需要中文、英文、数字,修复后这样写:
如果还要支持常见中文标点,可以这样: