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 相关文章推荐
利用递归把多维数组转为一维数组的函数
Oct 09 PHP
asp和php下textarea提交大量数据发生丢失的解决方法
Jan 20 PHP
解析如何用php screw加密php源代码
Jun 20 PHP
PHP操作MongoDB GridFS 存储文件的详解
Jun 20 PHP
PHP 输出URL的快捷方式示例代码
Sep 22 PHP
PHP字符串的递增和递减示例介绍
Feb 11 PHP
PHPStrom中实用的功能和快捷键大全
Sep 23 PHP
php中__toString()方法用法示例
Dec 07 PHP
基于PHP实现栈数据结构和括号匹配算法示例
Aug 10 PHP
PHP对称加密算法(DES/AES)类的实现代码
Nov 14 PHP
PHP+redis实现的悲观锁机制示例
Jun 12 PHP
解决laravel上传图片之后,目录有图片,但是访问不到(404)的问题
Oct 14 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
模拟OICQ的实现思路和核心程序(二)
2006/10/09 PHP
ueditor 1.2.6 使用方法说明
2013/07/24 PHP
PHP5.3安装Zend Guard Loader图文教程
2014/09/29 PHP
CodeIgniter配置之database.php用法实例分析
2016/01/20 PHP
PHP实现JS中escape与unescape的方法
2016/07/11 PHP
php微信开发之百度天气预报
2016/11/18 PHP
laravel中Redis队列监听中断的分析
2020/09/14 PHP
JavaScript异步调用定时方法并停止该方法实现代码
2012/03/16 Javascript
Extjs优化(一)删除冗余代码提高运行速度
2013/04/15 Javascript
jquery查找父元素、子元素(个人经验总结)
2014/04/09 Javascript
jQuery插件HighCharts实现的2D对数饼图效果示例【附demo源码下载】
2017/03/09 Javascript
JavaScript获取URL参数的方法之一
2017/03/24 Javascript
JS实现仿饿了么在浏览器标签页失去焦点时网页Title改变
2017/06/01 Javascript
vue修改vue项目运行端口号的方法
2017/08/04 Javascript
vue mint-ui tabbar变组件使用
2018/05/04 Javascript
JavaScript实现无限级递归树的示例代码
2019/03/29 Javascript
vue watch关于对象内的属性监听
2019/04/22 Javascript
如何写好一个vue组件,老夫的一年经验全在这了(推荐)
2019/05/18 Javascript
vue2之简易的pc端短信验证码的问题及处理方法
2019/06/03 Javascript
[01:04:14]VP vs TNC 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
pandas 获取季度,月度,年度首尾日期的方法
2018/04/11 Python
Python用于学习重要算法的模块pygorithm实例浅析
2018/08/16 Python
pygame实现俄罗斯方块游戏(基础篇3)
2019/10/29 Python
Python之Sklearn使用入门教程
2021/02/19 Python
浅谈html5标签css3的常用样式
2016/10/20 HTML / CSS
LocalStorage记住用户和密码功能
2017/07/24 HTML / CSS
新西兰最大的在线设计师眼镜店:SmartBuyGlasses新西兰
2017/10/20 全球购物
英国最全面的橄榄球联盟门票网站:Live Rugby Tickets
2018/10/06 全球购物
Omio葡萄牙:全欧洲低价大巴、火车和航班搜索和比价
2019/02/09 全球购物
护理毕业生自荐信范文
2013/12/22 职场文书
幼儿园小班评语大全
2014/04/17 职场文书
《永远的白衣战士》教学反思
2014/04/25 职场文书
水电站项目建议书
2014/05/12 职场文书
2014年党支部学习材料
2014/05/19 职场文书
销售员岗位职责范本
2015/04/11 职场文书
加薪通知
2015/04/25 职场文书