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函数,php爱好者站推荐
Mar 19 PHP
PHP与MySQL开发中页面出现乱码的一种解决方法
Jul 29 PHP
php 判断网页是否是utf8编码的方法
Jun 06 PHP
调试PHP程序的多种方法介绍
Nov 06 PHP
Symfony数据校验方法实例分析
Jan 26 PHP
PHP使用mysqldump命令导出数据库
Apr 14 PHP
php轻松实现文件上传功能
Mar 03 PHP
iOS10推送通知开发教程
Sep 19 PHP
PHP-FPM运行状态的实时查看及监控详解
Nov 18 PHP
PHP中ajax无刷新上传图片与图片下载功能
Feb 21 PHP
php使用crypt()函数进行加密
Jun 08 PHP
PHP中散列密码的安全性分析
Jul 26 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边学边教》(02.Apache+PHP环境配置――下篇)
2006/12/13 PHP
PHP与SQL注入攻击[三]
2007/04/17 PHP
PHP编译安装中遇到的两个错误和解决方法
2014/08/20 PHP
PHP编程求最大公约数与最小公倍数的方法示例
2017/05/29 PHP
jQuery中与toggleClass等价的程序段 以及未来学习的方向
2010/03/18 Javascript
JS对象转换为Jquery对象示例
2014/01/26 Javascript
基于jQuery 实现bootstrapValidator下的全局验证
2015/12/07 Javascript
Node.js程序中的本地文件操作用法小结
2016/03/06 Javascript
jQuery遍历json的方法(推荐)
2016/06/12 Javascript
JavaScript中有关一个数组中最大值和最小值及它们的下表的输出的解决办法
2016/07/01 Javascript
Actionscript与javascript交互实例程序(修改)
2016/09/22 Javascript
JS自定义函数对web前端上传的文件进行类型大小判断
2016/10/19 Javascript
jQuery实现可移动选项的左右下拉列表示例
2016/12/26 Javascript
vue2.0获取自定义属性的值
2017/03/28 Javascript
bootstrap datetimepicker控件位置异常的解决方法
2017/11/23 Javascript
微信小程序网络请求封装示例
2018/07/24 Javascript
Node.js爬虫如何获取天气和每日问候详解
2019/08/26 Javascript
vue实现树形结构样式和功能的实例代码
2019/10/15 Javascript
js实现登录时记住密码的方法分析
2020/04/05 Javascript
Jquery滑动门/tab切换实现方法完整示例
2020/06/05 jQuery
Antd的table组件表格的序号自增操作
2020/10/27 Javascript
Vue2.0 ES6语法降级ES5的操作
2020/10/30 Javascript
[01:21]辉夜杯战队访谈宣传片—CDEC
2015/12/25 DOTA
采用python实现简单QQ单用户机器人的方法
2014/07/03 Python
详解详解Python中writelines()方法的使用
2015/05/25 Python
一篇文章弄懂Python中所有数组数据类型
2019/06/23 Python
python使用装饰器作日志处理的方法
2019/07/11 Python
python 实现生成均匀分布的点
2019/12/05 Python
使用python实现希尔、计数、基数基础排序的代码
2019/12/25 Python
自我鉴定范文300字
2013/10/01 职场文书
代理班主任的自我评价
2014/02/04 职场文书
创建无烟单位实施方案
2014/03/29 职场文书
考核评语大全
2014/04/29 职场文书
关于读书的演讲稿400字
2014/08/27 职场文书
简单的辞职信模板
2015/05/12 职场文书
学习社交礼仪心得体会
2016/01/22 职场文书