最新公告
  • 欢迎您光临波比源码,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • php正则表达匹配中文问题分析

    本文章分析了在php中正则表达式对中文的支持问题,一般情况下我们可会能简单利用我上面的正则来验证中文,后面我分析了关于兼容gb2312,utf-8和表达式 ^[x7f-xff]+$ 可以完全搞定中文不兼容的问题。

    1. $str = '中123456789abcdefg'
    2. echo preg_match("/^[u4e00-u9fa5_a-zA-Z0-9]{3,15}$",$strName); 

    运行一下上面这段代码,看会有什么提示信息?

    Warning: preg_match(): Compilation failed: PCRE does not support L, l, N, P, p, U, u, or X at offset 3 in F:wwwrootphptest.php on line 2

    原来,PHP正则表达式中不支持下列 Perl 转义序列:L, l, N, P, p, U, u, or X,在 UTF-8 模式下,允许用“x{…}”,花括号中的内容是表示十六进制数字的字符串,原来的十六进制转义序列 xhh 如果其值大于 127 的话则匹配了一个双字节 UTF-8 字符,所以我们可以这样来解决:

    1. preg_match("/^[x80-xff_a-zA-Z0-9]{3,15}$",$strName); 
    2. preg_match('/[x{2460}-x{2468}]/u'$str); 

    匹配内码汉字,按照他提供的方式进行测试,代码如下:

    1. $str = "php编程"
    2. if (preg_match("/^[x{2460}-x{2468}]+$/u",$str)) { 
    3. print("该字符串全部是中文"); 
    4. else { 
    5. print("该字符串不全部是中文"); 

    发现这次依然对是否为中文判断失常,不过,既然x表示的十六进制数据,为什么和js里边提供的范围x4e00-x9fa5不一样呢?于是我就换成了下边的代码:

    1. $str = "php编程"
    2. if (preg_match("/^[x4e00-x9fa5]+$/u",$str)) { 
    3. print("该字符串全部是中文"); 
    4. else { 
    5. print("该字符串不全部是中文"); 

    本来以为铁定成功了的事情,没想到,warning又一次产生了:Warning: preg_match() [function.preg-match]: Compilation failed: invalid UTF-8 string at offset 6 in test.php on line 3

    看来又有错误的表达方式了,于是对照了一下那篇文章的表达方式,给“4e00”和“9fa5”两边分别用"{"和“}”包起来,跑了一遍,发现真的准确了:

    1. $str = "php编程"
    2. if (preg_match("/^[x{4e00}-x{9fa5}]+$/u",$str)) { 
    3. print("该字符串全部是中文"); 
    4. else { 
    5. print("该字符串不全部是中文"); 

    知道了php中utf-8编码下用正则表达式匹配汉字的最终正确表达式——/^[x{4e00}-x{9fa5}]+$/u,最后总结出:

    1. //if (preg_match(“/^[".chr(0xa1)."-".chr(0xff)."]+$/”, $str)) { //只能在GB2312情况下使用 
    2. if (preg_match(“/^[x7f-xff]+$/”, $str)) { //兼容gb2312,utf-8 
    3. echo “正确输入”; 
    4. else { 
    5. echo “错误输入”; 

    双字节字符编码范围

    1. GBK (GB2312/GB18030)

    x00-xff GBK双字节编码范围

    x20-x7f ASCII

    xa1-xff 中文 gb2312

    x80-xff 中文 gbk

    2. UTF-8 (Unicode)

    u4e00-u9fa5 (中文)

    xAC00-xD7A3 (韩文)

    u0800-u4e00 (日文)

    波比源码 – 精品源码模版分享 | www.bobi11.com
    1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
    2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
    3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
    4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
    5. 如有链接无法下载、失效或广告,请联系管理员处理!
    6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
    7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

    波比源码 » php正则表达匹配中文问题分析

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    波比源码
    一个高级程序员模板开发平台
    升级波友尊享更多特权立即升级