正则表达式怎么匹配中文字符?

♫英杰 阅读 46

我在写一个表单验证,需要限制用户只能输入中文、英文和数字,但我的正则好像对中文不起作用。试过用 /[u4e00-u9fa5]/,但有时候会漏掉一些生僻字或者标点。

比如下面这段代码,输入“你好!”的时候居然没匹配上,是我范围写错了吗?

const reg = /^[u4e00-u9fa5a-zA-Z0-9]+$/;
console.log(reg.test('你好!')); // 返回 false,但我觉得应该能识别中文啊
我来解答 赞 6 收藏
二维码
手机扫码查看
2 条解答
Code°德鑫
你的正则写法有几个问题。首先中文范围的表示要用转义符,另外你没考虑到标点符号的问题。拿去改改:

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梓希
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