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 8小时时间差的解决方法小结
Dec 22 PHP
php地址引用(php地址引用的效率问题)
Mar 23 PHP
通过dbi使用perl连接mysql数据库的方法
Apr 16 PHP
destoon实现不同会员组公司名称显示不同的颜色的方法
Aug 22 PHP
PHP多线程类及用法实例
Dec 03 PHP
PHP中的替代语法介绍
Jan 09 PHP
Laravel实现用户注册和登录
Jan 23 PHP
PHP操作mysql数据库分表的方法
Jun 09 PHP
thinkphp3.2.3 分页代码分享
Jul 28 PHP
ZendFramework框架实现连接两个或多个数据库的方法
Dec 08 PHP
Docker 安装 PHP并与Nginx的部署实例讲解
Feb 27 PHP
PHP实现爬虫爬取图片代码实例
Mar 03 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
ThinkPHP之N方法实例详解
2014/06/20 PHP
PHP采用XML-RPC构造Web Service实例教程
2014/07/16 PHP
php实现文章置顶功能的方法
2016/10/20 PHP
浅谈PHP中pack、unpack的详细用法
2018/03/12 PHP
一样的table?不一样的table(可编辑状态table)
2012/09/19 Javascript
页面按钮禁用与解除禁用的方法
2014/02/19 Javascript
jQuery绑定事件不执行但alert后可以正常执行
2014/06/03 Javascript
jQuery对象初始化的传参方式
2015/02/26 Javascript
jQuery简单实现遍历数组的方法
2015/04/14 Javascript
《JavaScript函数式编程》读后感
2015/08/07 Javascript
详解JSON1:使用TSQL查询数据和更新JSON数据
2016/11/21 Javascript
Vue项目路由刷新的实现代码
2019/04/17 Javascript
详解javascript中var与ES6规范中let、const区别与用法
2020/01/11 Javascript
python类和函数中使用静态变量的方法
2015/05/09 Python
python简单获取数组元素个数的方法
2015/07/13 Python
Python使用getpass库读取密码的示例
2017/10/10 Python
python实现图书馆研习室自动预约功能
2018/04/27 Python
python斐波那契数列的计算方法
2018/09/27 Python
对python中类的继承与方法重写介绍
2019/01/20 Python
Python使用matplotlib 模块scatter方法画散点图示例
2019/09/27 Python
基于Python3.6中的OpenCV实现图片色彩空间的转换
2020/02/03 Python
python修改微信和支付宝步数的示例代码
2020/10/12 Python
matplotlib绘制鼠标的十字光标的实现(内置方式)
2021/01/06 Python
python读取图片颜色值并生成excel像素画的方法实例
2021/02/19 Python
HTML5 解析规则分析
2009/08/14 HTML / CSS
Javascript 高级手势使用介绍
2013/04/21 HTML / CSS
控制工程专业个人求职信
2013/09/25 职场文书
幼儿园大班新学期寄语
2014/01/18 职场文书
年会搞笑主持词
2014/03/27 职场文书
综合办公室主任岗位职责
2014/04/13 职场文书
土建工程师岗位职责
2014/06/10 职场文书
党的群众路线教育实践活动心得体会(教师)
2014/10/31 职场文书
有关水浒传的读书笔记
2015/06/25 职场文书
Python爬虫:从m3u8文件里提取小视频的正确操作
2021/05/14 Python
Python 全局空间和局部空间
2022/04/06 Python
用PYTHON去计算88键钢琴的琴键频率和音高
2022/04/10 Python