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 mysql数据库操作类
Jun 04 PHP
PHP file_get_contents 函数超时的几种解决方法
Jul 30 PHP
PHP开发需要注意的安全问题
Sep 01 PHP
PHP中英混合字符串截取函数代码
Jul 17 PHP
利用PHP实现图片等比例放大和缩小的方法详解
Jun 06 PHP
PHP调用MsSQL Server 2012存储过程获取多结果集(包含output参数)的详解
Jul 03 PHP
php5.3不能连接mssql数据库的解决方法
Dec 27 PHP
yii2.0使用Plupload实现带缩放功能的多图上传
Dec 22 PHP
详解WordPress中提醒安装插件以及隐藏插件的功能实现
Dec 25 PHP
php魔法函数与魔法常量使用介绍
Jul 23 PHP
php支付宝APP支付功能
Jul 29 PHP
php+mysql+ajax 局部刷新点赞/取消点赞功能(每个账号只点赞一次)
Jul 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 is_dir() 判断给定文件名是否是一个目录
2010/05/10 PHP
ThinkPHP快速入门实例教程之数据分页
2014/07/01 PHP
利用Homestead快速运行一个Laravel项目的方法详解
2017/11/14 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
2020/02/27 PHP
jQuery学习基础知识小结
2010/11/25 Javascript
JQuery实现鼠标滑过显示导航下拉列表
2013/09/12 Javascript
使用js获取图片原始尺寸
2014/12/03 Javascript
jQuery中even选择器的定义和用法
2014/12/23 Javascript
讲解JavaScript中for...in语句的使用方法
2015/06/03 Javascript
js实现基于正则表达式的轻量提示插件
2015/08/29 Javascript
jQuery添加和删除输入文本框标签代码
2016/05/20 Javascript
全面了解addEventListener和on的区别
2016/07/14 Javascript
AngularJS实现一次监听多个值发生的变化
2016/08/31 Javascript
jQuery实现获取h1-h6标题元素值的方法
2017/03/06 Javascript
详解Vue.js基于$.ajax获取数据并与组件的data绑定
2017/05/26 Javascript
Vue项目中使用better-scroll实现菜单映射功能方法
2019/09/11 Javascript
Vue 中使用富文本编译器wangEditor3的方法
2019/09/26 Javascript
原生js无缝轮播插件使用详解
2020/03/09 Javascript
JavaScript构造函数原理及实现流程解析
2020/11/19 Javascript
[01:25]2014DOTA2国际邀请赛 zhou分析LGD比赛情况
2014/07/14 DOTA
[01:05:30]VP vs TNC 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
Python实现简单的代理服务器
2015/07/25 Python
使用python3实现操作串口详解
2019/01/01 Python
python requests指定出口ip的例子
2019/07/25 Python
Python爬虫解析网页的4种方式实例及原理解析
2019/12/30 Python
中国高端鲜花第一品牌:roseonly(一生只送一人)
2017/02/12 全球购物
农业资源与环境专业自荐信范文
2013/12/30 职场文书
微笑面对生活演讲稿
2014/05/13 职场文书
销售岗位职责范本
2014/06/12 职场文书
党员弘扬焦裕禄精神思想汇报
2014/09/10 职场文书
机器人总动员观后感
2015/06/09 职场文书
2015迎新晚会开场白
2015/07/17 职场文书
同学联谊会邀请函
2019/06/24 职场文书
Python3 使用pip安装git并获取Yahoo金融数据的操作
2021/04/08 Python
手把手教你用SpringBoot将文件打包成zip存放或导出
2021/06/11 Java/Android
电脑开机弹出documents文件夹怎么回事?弹出documents文件夹解决方法
2022/04/08 数码科技