php utf-8编码 正则匹配中文

时间:2022-09-26 06:09:05

首先unicode里面 中文的区域的0x4e00-0x9fa5
在java或者js这种已unicode编码处理字符串的编程语言中
/^[\u4e00-\u9fa5]+$/就可以判断一个字符串是否全部为中文

那么php中 字符的编码根据页面而定
页面是gbk的 字符编码就是gbk的 utf-8也同理
之前有一个表达式 “/^[\x80-\xff]+$/”
仅仅可以匹配是否含有非ascll字符
而汉字只是其中一个比较小的区域 不太精确

由于我的页面编码是utf-8的
于是把js的表达式搬到php中来
提示PCRE不支持”\u”和其他乱七八糟的一大堆东西

后来查资料了解到 php的正则有一种叫做字符组的东西
用\x{…}表示
于是把表达式改成”/^[\x{4e00}-\x{9fa5}]+$/”
又提示”\x”表达式后的数字太大

又查了资料 了解到可以使用修正模式”u” 让程序把后面当成unicode字符处理
于是改成了”/^[\x{4e00}-\x{9fa5}]+$/u” 测试成功

所以php下正则匹配中文的表达式是 “/^[\x{4e00}-\x{9fa5}]+$/u”
这个仅适用于utf-8编码