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中看实例学正则表达式
Dec 25 PHP
phpfans留言版用到的install.php
Jan 04 PHP
在字符串指定位置插入一段字符串的php代码
Feb 16 PHP
使用PHP 5.0创建图形的巧妙方法
Oct 12 PHP
php实现mysql数据库操作类分享
Feb 14 PHP
ThinkPHP3.1新特性之对分组支持的改进与完善概述
Jun 19 PHP
浅析PHP中call user func()函数及如何使用call user func调用自定义函数
Nov 05 PHP
WordPress中用于获取搜索表单的PHP函数使用解析
Jan 05 PHP
简单实现php上传文件功能
Sep 21 PHP
PHP PDOStatement::closeCursor讲解
Jan 30 PHP
对laravel in 查询的使用方法详解
Oct 09 PHP
php报错502badgateway解决方法
Oct 11 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中使用ajax接收json数据的方法
2014/12/18 PHP
php解析xml方法实例详解
2015/05/12 PHP
PHP hex2bin()函数用法讲解
2019/02/25 PHP
对laravel in 查询的使用方法详解
2019/10/09 PHP
让焦点自动跳转
2006/07/01 Javascript
通过js脚本复制网页上的一个表格的不错实现方法
2006/12/29 Javascript
JavaScript 事件对象的实现
2009/07/13 Javascript
jQuery获取Select选择的Text和Value(详细汇总)
2013/01/25 Javascript
javascript实现类似百度分享功能的方法
2015/07/27 Javascript
Vue.js 表单校验插件
2016/08/14 Javascript
Angular 应用技巧总结
2016/09/14 Javascript
关于jquery form表单序列化的注意事项详解
2017/08/01 jQuery
JS 实现微信扫一扫功能
2018/09/14 Javascript
解决vue.js提交数组时出现数组下标的问题
2019/11/05 Javascript
Vue 的 v-model用法实例
2020/11/23 Vue.js
[01:32]TI奖金增速竟因它再创新高!DOTA2勇士令状不朽珍藏Ⅰ饰品欣赏
2018/05/18 DOTA
python妙用之编码的转换详解
2017/04/21 Python
TensorFlow安装及jupyter notebook配置方法
2017/09/08 Python
python中os和sys模块的区别与常用方法总结
2017/11/14 Python
解决python3读取Python2存储的pickle文件问题
2018/10/25 Python
pandas分别写入excel的不同sheet方法
2018/12/11 Python
利用Python实现Shp格式向GeoJSON的转换方法
2019/07/09 Python
Python新手学习装饰器
2020/06/04 Python
Python实现列表索引批量删除的5种方法
2020/11/16 Python
Volcom法国官网:美国冲浪滑板品牌
2017/05/25 全球购物
体育学院毕业生自荐信
2013/11/03 职场文书
四年的大学生生活自我评价
2013/12/09 职场文书
高一化学教学反思
2014/02/05 职场文书
房务中心文员岗位职责
2014/04/16 职场文书
祖国在我心中演讲稿600字
2014/05/04 职场文书
科级干部群众路线教育实践活动个人对照检查材料
2014/09/19 职场文书
乱世佳人观后感
2015/06/08 职场文书
小学教师见习总结
2015/06/23 职场文书
二十年同学聚会致辞
2015/07/28 职场文书
基于Redis实现分布式锁的方法(lua脚本版)
2021/05/12 Redis
springboot为异步任务规划自定义线程池的实现
2022/06/14 Java/Android