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
解析PHP中ob_start()函数的用法
Jun 24 PHP
php操作xml
Oct 27 PHP
PHP中判断变量为空的几种方法小结
Nov 12 PHP
php多维数组去掉重复值示例分享
Mar 02 PHP
php 使用GD库为页面增加水印示例代码
Mar 24 PHP
php for 循环使用的简单实例
Jun 02 PHP
PHP入门教程之图像处理技巧分析
Sep 11 PHP
PHP上传图片时判断上传文件是否为可用图片的方法
Oct 20 PHP
PHP重定向与伪静态区别
Feb 19 PHP
PHP排序算法之堆排序(Heap Sort)实例详解
Apr 21 PHP
PHP的mysqli_stmt_init()函数讲解
Jan 24 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 结果集的分页实现代码
2009/03/10 PHP
Yii结合CKEditor实现图片上传功能
2014/06/13 PHP
php实现的双向队列类实例
2014/09/24 PHP
thinkphp文件引用与分支结构用法实例
2014/11/26 PHP
微信自定义菜单的处理开发示例
2015/04/16 PHP
IE中jquery.form中ajax提交没反应解决方法分享
2012/09/11 Javascript
利用毫秒减值计算时长的js代码
2013/09/22 Javascript
nodejs教程之环境安装及运行
2014/11/21 NodeJs
JavaScript动态修改网页元素内容的方法
2015/03/21 Javascript
简介JavaScript中的unshift()方法的使用
2015/06/09 Javascript
bootstrap组件之导航组件使用方法
2017/01/19 Javascript
jquery实现静态搜索功能(可输入搜索文字)
2017/03/28 jQuery
vue.js+element-ui动态配置菜单的实例
2018/09/07 Javascript
微信小程序实现的绘制table表格功能示例
2019/04/26 Javascript
微信小程序开发之获取用户手机号码(php接口解密)
2020/05/17 Javascript
JS 5种遍历对象的方式
2020/06/16 Javascript
Vue.js使用axios动态获取response里的data数据操作
2020/09/08 Javascript
Python MySQLdb Linux下安装笔记
2015/05/09 Python
Python遍历文件夹和读写文件的实现代码
2016/08/28 Python
Python使用三种方法实现PCA算法
2017/12/12 Python
python查看模块安装位置的方法
2018/10/16 Python
解决python给列表里添加字典时被最后一个覆盖的问题
2019/01/21 Python
Python实现获取系统临时目录及临时文件的方法示例
2019/06/26 Python
python中必要的名词解释
2019/11/20 Python
tensorboard显示空白的解决
2020/02/15 Python
夏威夷咖啡公司:Hawaii Coffee Company
2019/09/19 全球购物
PHP经典面试题
2016/09/03 面试题
护理个人求职信范文
2014/01/08 职场文书
关于青春的演讲稿500字
2014/08/22 职场文书
未婚证明书模板
2014/10/08 职场文书
工作失职检讨书500字
2014/10/17 职场文书
团员自我评价范文
2015/03/10 职场文书
党员干部学习十八届五中全会精神心得体会
2016/01/05 职场文书
编写python程序的90条建议
2021/04/14 Python
Element-ui Layout布局(Row和Col组件)的实现
2021/12/06 Vue.js
i5-10400f处理相当于i7多少水平
2022/04/19 数码科技