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

Newb.成娟 阅读 21

我在写一个表单验证,想用正则判断用户输入的是否是中文,但试了几个写法都不对。比如我用了 /[u4e00-u9fa5]/,结果输入“你好123”也能通过,明明里面有数字啊!

是不是这个正则只匹配了部分字符?我想要的是整个字符串都必须是中文才行。有没有正确的写法?

const isChinese = (str) => {
  return /[u4e00-u9fa5]/.test(str);
};
console.log(isChinese('你好123')); // 返回 true,但应该返回 false
我来解答 赞 12 收藏
二维码
手机扫码查看
2 条解答
胜换
胜换 Lv1
你遇到的问题是因为正则表达式的写法不正确,而且没有确保整个字符串都必须是中文。你写的 /[u4e00-u9fa5]/ 实际上是在匹配字符 'u' '4' 'e' '0' 到 'u' '9' 'f' 'a' '5' 这些字符,而不是真正的中文字符范围。

首先,要匹配中文字符,你需要正确地写 Unicode 范围,并且记得转义反斜杠。其次,要确保整个字符串都是中文字符,可以使用 ^ 和 $ 来匹配字符串的开始和结束位置。

修改后的正则表达式应该是这样的:

const isChinese = (str) => {
return /^[u4e00-u9fa5]+$/.test(str);
};
console.log(isChinese('你好123')); // 返回 false
console.log(isChinese('你好')); // 返回 true


这里的关键点在于 ^ 和 $,它们确保了从字符串的开始到结束都是中文字符。希望这样能解决问题。记得在写正则的时候仔细检查字符范围和转义符号,不然很容易出错。
点赞
2026-03-22 01:04
ლ梓晴
ლ梓晴 Lv1
漏了 ^ 和 $ 锚点,加上就行了:

const isChinese = (str) => {
return /^[u4e00-u9fa5]+$/.test(str);
};
点赞 1
2026-03-08 22:00