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 相关文章推荐
动态网站web开发 PHP、ASP还是ASP.NET
Oct 09 PHP
mysql_fetch_assoc和mysql_fetch_row的功能加起来就是mysql_fetch_array
Jan 15 PHP
php下几个常用的去空、分组、调试数组函数
Feb 22 PHP
基于PHP中的常用函数回顾
Jul 11 PHP
PHP数字和字符串ID互转函数(类似优酷ID)
Jun 30 PHP
Ubuntu中启用php的mail()函数并解决发送邮件速度慢问题
Mar 27 PHP
PHP中使用substr()截取字符串出现中文乱码问题该怎么办
Oct 21 PHP
前端必学之PHP语法基础
Jan 01 PHP
PHP如何实现跨域
May 30 PHP
PHP判断一个数组是另一个数组子集的方法详解
Jul 31 PHP
php获得刚插入数据的id 的几种方法总结
May 31 PHP
Ajax+PHP实现的删除数据功能示例
Feb 12 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跨站刷票的实现代码
2013/06/18 PHP
利用curl抓取远程页面内容的示例代码
2013/07/23 PHP
php根据一个给定范围和步进生成数组的方法
2015/06/19 PHP
php调用淘宝开放API实现根据卖家昵称获取卖家店铺ID的方法
2015/07/29 PHP
php如何连接sql server
2015/10/16 PHP
利用PHP将图片转换成base64编码的实现方法
2016/09/13 PHP
Thinkphp5 自定义上传文件名的实现方法
2019/07/23 PHP
用prototype实现的简单小巧的多级联动菜单
2007/03/24 Javascript
JavaScript 格式字符串的应用
2010/03/29 Javascript
十个迅速提升JQuery性能让你的JQuery跑得更快
2012/12/10 Javascript
使用jquery写个更改表格行顺序的小功能
2014/04/29 Javascript
JavaScript访问CSS属性的几种方式介绍
2014/07/21 Javascript
sogou地图API用法实例教程
2014/09/11 Javascript
jquery制作多功能轮播图插件
2015/04/02 Javascript
js判断请求的url是否可访问,支持跨域判断的实现方法
2016/09/17 Javascript
angular实现spa单页面应用实例
2017/07/10 Javascript
javascript实现手动点赞效果
2019/04/09 Javascript
微信小程序实现同一页面取值的方法分析
2019/04/30 Javascript
vue动态绘制四分之三圆环图效果
2019/09/03 Javascript
JS JQuery获取data-*属性值方法解析
2020/09/01 jQuery
详解nginx配置vue h5 history去除#号
2020/11/09 Javascript
js重写alert事件(避免alert弹框标题出现网址)
2020/12/04 Javascript
[01:14]DOTA2亚洲邀请赛小组赛赛前花絮
2017/03/27 DOTA
[05:00]TI9战队采访 - Royal Never Give Up
2019/08/20 DOTA
python中查找excel某一列的重复数据 剔除之后打印
2013/02/10 Python
python模拟登录百度贴吧(百度贴吧登录)实例
2013/12/18 Python
python简单获取本机计算机名和IP地址的方法
2015/06/03 Python
python处理csv数据动态显示曲线实例代码
2018/01/23 Python
对python中的argv和argc使用详解
2018/12/15 Python
Python 通过微信控制实现app定位发送到个人服务器再转发微信服务器接收位置信息
2019/08/05 Python
手写一个python迭代器过程详解
2019/08/27 Python
python输出数组中指定元素的所有索引示例
2019/12/06 Python
css3针对移动端卡顿问题的解决(动画性能优化)
2020/02/14 HTML / CSS
开朗女孩的自我评价
2014/02/10 职场文书
银行先进个人事迹材料
2014/05/11 职场文书
2016年离婚协议书范文
2016/03/18 职场文书