PHP 正则判断中文UTF-8或GBK的思路及具体实现


Posted in PHP onNovember 26, 2013

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 相关文章推荐
一个更简单的无限级分类菜单代码
Jan 16 PHP
CodeIgniter php mvc框架 中国网站
May 26 PHP
php中\r \r\n \t的区别示例介绍
Feb 08 PHP
基于GD2图形库的PHP生成图片缩略图类代码分享
Feb 08 PHP
PHP IDE phpstorm 常用快捷键
May 18 PHP
PHP在线书签系统分享
Jan 04 PHP
PHP使用Memcache时模拟命名空间及缓存失效问题的解决
Feb 27 PHP
win10环境PHP 7 安装配置【教程】
May 09 PHP
PHP关键特性之命名空间实例详解
May 06 PHP
php调用云片网接口发送短信的实现方法
Oct 25 PHP
PHP如何根据文件头检测文件类型实例代码
Oct 14 PHP
PHP命令行与定时任务
Apr 01 PHP
php对二维数组按指定键值key排序示例代码
Nov 26 #PHP
PHP上传文件时文件过大$_FILES为空的解决方法
Nov 26 #PHP
PHP获取当前url的具体方法全面解析
Nov 26 #PHP
php 批量替换html标签的实例代码
Nov 26 #PHP
利用phpExcel实现Excel数据的导入导出(全步骤详细解析)
Nov 26 #PHP
php数组去重实例及分析
Nov 26 #PHP
php三维数组去重(示例代码)
Nov 26 #PHP
You might like
php cache类代码(php数据缓存类)
2010/04/15 PHP
浅谈php serialize()与unserialize()的用法
2013/06/05 PHP
在WordPress中实现发送http请求的相关函数解析
2015/12/29 PHP
在Mac OS下搭建LNMP开发环境的步骤详解
2017/03/10 PHP
Nigma vs Liquid BO3 第一场2.13
2021/03/10 DOTA
javascript getElementsByName()的用法说明
2009/07/31 Javascript
jQuery事件绑定on()、bind()与delegate() 方法详解
2015/06/03 Javascript
jQuery实现仿百度帖吧头部固定导航效果
2015/08/07 Javascript
jQuery之动画效果大全
2016/11/09 Javascript
使用JS正则表达式 替换括号,尖括号等
2016/11/29 Javascript
详解在vue-cli项目中使用mockjs(请求数据删除数据)
2017/10/23 Javascript
微信小程序用户自定义模版用法实例分析
2017/11/28 Javascript
NodeJS简单实现WebSocket功能示例
2018/02/10 NodeJs
vue2中使用less简易教程
2018/03/27 Javascript
JavaScript事件冒泡与事件捕获实例分析
2018/08/01 Javascript
Node.js搭建WEB服务器的示例代码
2018/08/15 Javascript
node.js中express模块创建服务器和http模块客户端发请求
2019/03/06 Javascript
详释JavaScript执行环境与执行栈
2019/04/02 Javascript
layer的prompt弹出框,点击回车,触发确定事件的方法
2019/09/06 Javascript
layui 实现加载动画以及非真实加载进度的方法
2019/09/23 Javascript
[40:03]Liquid vs Optic 2018国际邀请赛淘汰赛BO3 第一场 8.21
2018/08/22 DOTA
给Python的Django框架下搭建的BLOG添加RSS功能的教程
2015/04/08 Python
Python生成不重复随机值的方法
2015/05/11 Python
Python3.7中安装openCV库的方法
2018/07/11 Python
基于logstash实现日志文件同步elasticsearch
2020/08/06 Python
教你如何一步一步用Canvas写一个贪吃蛇
2018/10/22 HTML / CSS
详解canvas绘制多张图的排列顺序问题
2019/01/21 HTML / CSS
h5封装下拉刷新
2020/08/25 HTML / CSS
Booking.com亚太地区:Booking.com APAC
2020/02/07 全球购物
求职毕业生自荐书
2014/02/08 职场文书
协议书的格式
2014/04/23 职场文书
2014年后勤工作总结
2014/11/18 职场文书
个人廉政承诺书
2015/04/28 职场文书
2015年暑期实践报告范文
2015/07/13 职场文书
一个家长教育孩子的心得体会
2016/01/15 职场文书
教你如何使用Python下载B站视频的详细教程
2021/04/29 Python