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 相关文章推荐
杏林同学录(三)
Oct 09 PHP
php下通过curl抓取yahoo boss 搜索结果的实现代码
Jun 10 PHP
php获取字段名示例分享
Mar 03 PHP
PHP使用imagick读取PDF生成png缩略图的两种方法
Mar 20 PHP
PHP5.5在windows安装使用memcached服务端的方法
Apr 16 PHP
PHP生成迅雷、快车、旋风等软件的下载链接代码实例
May 12 PHP
深入讲解PHP Session及如何保持其不过期的方法
Aug 18 PHP
php中使用GD库做验证码
Mar 31 PHP
PHP Filter过滤器全面解析
Aug 09 PHP
PHP实现图片压缩
Sep 09 PHP
Laravel6.0.4中将添加计划任务事件的方法步骤
Oct 15 PHP
php 解析非标准json、非规范json
Apr 01 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中return 和 exit 、break和contiue 区别与用法
2012/04/09 PHP
ThinkPHP中关联查询实例
2014/12/02 PHP
PHP把MSSQL数据导入到MYSQL的方法
2014/12/27 PHP
Yii2.0表关联查询实例分析
2016/07/18 PHP
微信第三方登录(原生)demo【必看篇】
2017/05/26 PHP
在JavaScript中使用timer示例
2014/05/08 Javascript
JavaScript SHA512加密算法详细代码
2016/10/06 Javascript
jQuery序列化表单成对象的简单实现
2016/11/29 Javascript
Javascript DOM事件操作小结(监听鼠标点击、释放,悬停、离开等)
2017/01/20 Javascript
JS实现动态修改table及合并单元格的方法示例
2017/02/20 Javascript
Js中async/await的执行顺序详解
2017/09/22 Javascript
小程序自定义日历效果
2018/12/29 Javascript
Node.js之删除文件夹(含递归删除)代码实例
2019/09/09 Javascript
微信小程序如何实现五星评价功能
2019/10/15 Javascript
Vue3新特性之在Composition API中使用CSS Modules
2020/07/13 Javascript
python使用7z解压apk包的方法
2015/04/18 Python
Python查询阿里巴巴关键字排名的方法
2015/07/08 Python
Python中使用Queue和Condition进行线程同步的方法
2016/01/19 Python
python实现下载文件的三种方法
2017/02/09 Python
python类的继承实例详解
2017/03/30 Python
Python3编码问题 Unicode utf-8 bytes互转方法
2018/10/26 Python
Python Django切换MySQL数据库实例详解
2019/07/16 Python
Django基础知识 web框架的本质详解
2019/07/18 Python
解决TensorFlow训练内存不断增长,进程被杀死问题
2020/02/05 Python
Python yield的用法实例分析
2020/03/06 Python
巧用CSS3 border实现图片遮罩效果代码
2012/04/09 HTML / CSS
HTML5梦幻之旅——炫丽的流星雨效果实现过程
2013/08/06 HTML / CSS
详解html5页面 rem 布局适配方法
2018/01/12 HTML / CSS
Linux如何压缩可执行文件
2013/10/21 面试题
相亲大会策划方案
2014/06/05 职场文书
获奖感言一句话
2015/07/31 职场文书
教你怎么用Python处理excel实现自动化办公
2021/04/30 Python
Golang 实现获取当前函数名称和文件行号等操作
2021/05/08 Golang
python使用tkinter实现透明窗体上绘制随机出现的小球(实例代码)
2021/05/17 Python
Python实现Excel文件的合并(以新冠疫情数据为例)
2022/03/20 Python
MySql重置root密码 --skip-grant-tables
2022/04/11 MySQL