UTF-8正则表达式如何匹配汉字


Posted in PHP onAugust 03, 2015

判断输入内容是否含有违法字符,请看下面代码

$str = "编程";
// if(!preg_match("/^[\x{4e00}-\x{9fa5}A-Za-z0-9_]+$/u",$str)) 
//UTF-8汉字字母数字下划线正则表达式
if(!preg_match("/^[\x{4e00}-\x{9fa5}]+$/u",$str)) //UTF-8汉字字母数字下划线正则表达式
 { 
  echo "<font color=red>您输入的[".$str."]含有违法字符</font>"; 
 }
 else 
 {
  echo "<font color=green>您输入的[".$str."]完全合法,通过!</font>"; 

 }

-----------------------

UTF-8匹配:
在javascript中,要判断字符串是中文是很简单的。

比如:

 var str = "php编程";

 if (/^[\u4e00-\u9fa5]+$/.test(str)) 
{ alert("该字符串全部是中文"); 

}  

else{ alert("该字符串不全部是中文");

 }

php中,是用\x表示十六进制数据的。

于是,变换成如下的代码:

 $str = "php编程"; 

if (preg_match("/^[\x4e00-\x9fa5]+$/",$str)) 

{ 

print("该字符串全部是中文"); 

} 

else { print("该字符串不全部是中文");

}

貌似不报错了,判断的结果也正确,不过把$str换成“编程”两字,结果却还是显示“该字符串不全部是中文”,看来这样的判断还是不够准确。
重要:

查阅了<精通正则表达式>发现,对于[\x4e00-\x9fa5]这块东西,自己做一个强化的解释
php的正则中, [\x4e00-\x9fa5],其实就是  字符和字符组的概念, \x{hex},表达一个16进制数, 需要注意的是hex 可以是1-2位的,也可以是4位的,但是如果是4位的必须加上大括号,
同时,如果是大于x{FF}的hex,必须和u 修饰符连用,不然会非法出错

网上只能找到匹配全角字符的正则:   ^[\x80-\xff]*^/   ,这里可以不加大括号 [\u4e00-\u9fa5]可以匹配中文,但是PHP又不支持     不过,既然\x表示的十六进制数据,为什么和js里边提供的范围\x4e00-\x9fa5不一样呢?

于是我就换成了下边的代码,发现真的准确了:

 $str = "php编程";

 if (preg_match("/^[\x{4e00}-\x{9fa5}]+$/u",$str)) 

{ 

print("该字符串全部是中文"); 

} 

else { print("该字符串不全部是中文");

 }

知道了php中utf-8编码下用正则表达式匹配汉字的最终正确表达式——/^[\x{4e00}-\x{9fa5}]+$/u, 参考以上文章写了如下一段测试代码(复制以下代码保存成.php文件)
<?php $action = trim($_GET['action']);

 if($action == "sub") { 

 $str = $_POST['dir'];  

 //if(!preg_match("/^[".chr(0xa1)."-".chr(0xff)."A-Za-z0-9_]+$/",$str)) //GB2312汉字字母数字下划线正则表达式  

 if(!preg_match("/^[\x{4e00}-\x{9fa5}A-Za-z0-9_]+$/u",$str)) 

 //UTF-8汉字字母数字下划线正则表达式 

 {   

echo "<font color=red>您输入的[".$str."]含有违法字符</font>";  

 }  

else  

{  

 echo "<font color=green>您输入的[".$str."]完全合法,通过!</font>";  

 } } 

?<form method="POST" action="?action=sub"> 输入字符(数字,字母,汉字,下划线): 

 <input type="text" name="dir" value=""> 

 <input type="submit" value="提交"> 

</form>

GBK:

preg_match("/^[".chr(0xa1)."-".chr(0xff)."A-Za-z0-9_]+$/",$str); //GB2312汉字字母数字下划线正则表达式

以上内容就是PHP中UTF-8正则表达式如何匹配汉字的全部内容,希望大家喜欢。

PHP 相关文章推荐
php 文件状态缓存带来的问题
Dec 14 PHP
php 获取远程网页内容的函数
Sep 08 PHP
Android ProgressBar进度条和ProgressDialog进度框的展示DEMO
Jun 19 PHP
在Mac OS上编译安装Nginx+PHP+MariaDB开发环境的教程
Feb 23 PHP
php parse_str() 函数的定义和用法
May 23 PHP
php中实现进程锁与多进程的方法
Sep 18 PHP
遍历echsop的region表形成缓存的程序实例代码
Nov 01 PHP
PHP缩略图生成和图片水印制作
Jan 07 PHP
PHP检测数据类型的几种方法(总结)
Mar 04 PHP
php框架CodeIgniter使用redis的方法分析
Apr 13 PHP
php 根据URL下载远程图片、压缩包、pdf等文件到本地
Jul 26 PHP
PhpStorm 如何优雅的调试Hyperf的方法步骤
Nov 24 PHP
PHP使用缓存即时输出内容(output buffering)的方法
Aug 03 #PHP
php中ob函数缓冲机制深入理解
Aug 03 #PHP
如何利用http协议发布博客园博文评论
Aug 03 #PHP
在CentOS上搭建LAMP+vsftpd环境的简单指南
Aug 01 #PHP
如何使用php实现评委评分器
Jul 31 #PHP
php给图片加文字水印
Jul 31 #PHP
初识通用数据库操作类――前端easyui-datagrid,form(php)
Jul 31 #PHP
You might like
PHP版单点登陆实现方案的实例
2016/11/17 PHP
PHP使用PDO创建MySQL数据库、表及插入多条数据操作示例
2019/05/30 PHP
JQuery 构建客户/服务分离的链接模型中Table中的排序分析
2010/01/22 Javascript
jQuery验证Checkbox是否选中的代码 推荐
2011/09/04 Javascript
滚动图片效果 jquery实现回旋滚动效果
2013/01/08 Javascript
jquery 延迟执行实例介绍
2013/08/20 Javascript
浅谈javascript中createElement事件
2014/12/05 Javascript
JavaScript三元运算符的多种使用技巧
2015/04/16 Javascript
TypeOf这些知识点你了解吗
2016/02/21 Javascript
修改js confirm alert 提示框文字的简单实例
2016/06/10 Javascript
各式各样的导航条效果css3结合jquery代码实现
2016/09/17 Javascript
微信小程序 教程之WXML
2016/10/18 Javascript
ES6中module模块化开发实例浅析
2017/04/06 Javascript
Angular2 自定义表单验证器的实现方法
2018/12/14 Javascript
原生JavaScript实现日历功能代码实例(无引用Jq)
2019/09/23 Javascript
Vue实现穿梭框效果
2020/09/30 Javascript
[05:09]2016国际邀请赛中国区预选赛淘汰赛首日精彩回顾
2016/06/29 DOTA
wxpython学习笔记(推荐查看)
2014/06/09 Python
详解python-图像处理(映射变换)
2019/03/22 Python
django中media媒体路径设置的步骤
2019/11/15 Python
PHP基于phpqrcode类库生成二维码过程解析
2020/05/28 Python
Scrapy框架介绍之Puppeteer渲染的使用
2020/06/19 Python
python Gabor滤波器讲解
2020/10/26 Python
Html5实现二维码扫描并解析
2016/01/20 HTML / CSS
DJI大疆无人机官方商城:全球领先的无人飞行器研发和生产商
2016/12/21 全球购物
Myprotein亚太地区:欧洲第一在线运动营养品牌
2020/12/20 全球购物
人事部专员岗位职责
2014/03/04 职场文书
青年安全生产示范岗事迹材料
2014/05/04 职场文书
社区禁毒宣传活动总结
2015/05/07 职场文书
合同审查法律意见书
2015/06/04 职场文书
2015年数学教研工作总结
2015/07/22 职场文书
婚宴祝酒词大全
2015/08/10 职场文书
2016年妇联“6﹒26国际禁毒日”宣传活动总结
2016/04/05 职场文书
详解php中流行的rpc框架
2021/05/29 PHP
Redis主从配置和底层实现原理解析(实战记录)
2021/06/30 Redis
Spring Boot优化后启动速度快到飞起技巧示例
2022/07/23 Java/Android