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简单的伪原创程序,配合商城采集用的
Oct 12 PHP
《PHP编程最快明白》第八讲:php启发和小结
Nov 01 PHP
php+mysqli实现批量替换数据库表前缀的方法
Dec 29 PHP
php微信公众平台开发类实例
Apr 01 PHP
php动态变量定义及使用
Jun 10 PHP
windows7配置Nginx+php+mysql的详细教程
Sep 04 PHP
THINKPHP在添加数据的时候获取主键id的值方法
Apr 03 PHP
PHP对象相关知识总结
Apr 09 PHP
利用php的ob缓存机制实现页面静态化方法
Jul 09 PHP
laravel实现按时间日期进行分组统计方法示例
Mar 23 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式二图文详解
Apr 09 PHP
PHP进阶学习之类的自动加载机制原理分析
Jun 18 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 empty,isset,is_null判断比较(差异与异同)
2010/10/19 PHP
PHP实现通过Luhn算法校验信用卡卡号是否有效
2015/03/23 PHP
php和vue配合使用技巧和方法
2019/05/09 PHP
JavaScript 常用函数
2009/12/30 Javascript
Javascript 判断客户端浏览器类型代码
2010/03/01 Javascript
juqery 学习之三 选择器 层级 基本
2010/11/25 Javascript
jquery里的each使用方法详解
2010/12/22 Javascript
javascript权威指南 学习笔记之变量作用域分享
2011/09/28 Javascript
jquery的flexigrid无法显示数据提示获取到数据
2013/07/19 Javascript
jquery获取对象的方法足以应付常见的各种类型的对象
2014/05/14 Javascript
js实现简单鼠标跟随效果的方法
2015/04/10 Javascript
jQuery插件slicebox实现3D动画图片轮播切换特效
2015/04/12 Javascript
jQuery实现平滑滚动页面到指定锚点链接的方法
2015/07/15 Javascript
JavaScript数组操作函数汇总
2016/08/05 Javascript
js获取时间函数及扩展函数的方法
2016/10/30 Javascript
JS简单生成随机数(随机密码)的方法
2017/05/11 Javascript
BootStrap 导航条实例代码
2017/05/18 Javascript
Ajax高级笔记 JavaScript高级程序设计笔记
2017/06/22 Javascript
微信小程序实现列表下拉刷新上拉加载
2020/07/29 Javascript
详解自定义ajax支持跨域组件封装
2018/02/08 Javascript
Vue父组件如何获取子组件中的变量
2019/07/24 Javascript
通过js示例讲解时间复杂度与空间复杂度
2019/08/06 Javascript
js滚轮事件 js自定义滚动条的实现
2020/01/18 Javascript
Python类的用法实例浅析
2015/05/27 Python
Python中扩展包的安装方法详解
2017/06/14 Python
Django中针对基于类的视图添加csrf_exempt实例代码
2018/02/11 Python
Python flask框架实现查询数据库并显示数据
2020/06/04 Python
从python读取sql的实例方法
2020/07/21 Python
python 写一个文件分发小程序
2020/12/05 Python
Python排序函数的使用方法详解
2020/12/11 Python
美国首屈一指的礼品篮供应商:GiftTree
2018/01/06 全球购物
施工资料员的岗位职责
2013/12/22 职场文书
工伤事故处理协议书怎么写
2014/10/15 职场文书
工商局所长四风自我剖析及整改措施
2014/10/26 职场文书
体检通知范文
2015/04/21 职场文书
如何用PHP websocket实现网页实时聊天
2021/05/26 PHP