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 相关文章推荐
Eclipse中php插件安装及Xdebug配置的使用详解
Apr 25 PHP
php抓取页面的几种方法详解
Jun 17 PHP
PHP类的反射用法实例
Nov 03 PHP
PHP访问Google Search API的方法
Mar 05 PHP
关于扩展 Laravel 默认 Session 中间件导致的 Session 写入失效问题分析
Jan 08 PHP
PHP实现原比例生成缩略图的方法
Feb 03 PHP
PHP读MYSQL中文乱码的快速解决方法
Oct 01 PHP
浅谈PHP命令执行php文件需要注意的问题
Dec 16 PHP
总结的一些PHP开发中的tips(必看篇)
Mar 24 PHP
关于PHP定时发送服务的解决办法
Apr 23 PHP
form自动提交实例讲解
Jul 10 PHP
TP5框架使用QueryList采集框架爬小说操作示例
Mar 26 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学习笔记 [预定义数组(超全局数组)]
2011/06/09 PHP
php selectradio和checkbox默认选择的实现方法详解
2013/06/29 PHP
使用PHP如何实现高效安全的ftp服务器(二)
2015/12/30 PHP
php下载文件,添加响应头的简单实例
2016/09/22 PHP
PHP定时任务获取微信access_token的方法
2016/10/10 PHP
创建无限极分类树型结构的简单方法
2017/06/20 PHP
PHP+Ajax实现上传文件进度条动态显示进度功能
2018/06/04 PHP
Laravel第三方包报class not found的解决方法
2019/10/13 PHP
php 多继承的几种常见实现方法示例
2019/11/18 PHP
PHP 超级全局变量相关总结
2020/06/30 PHP
jQuery EasyUI中对表格进行编辑的实现代码
2010/06/10 Javascript
JS获取网页属性包括宽、高等等
2014/04/03 Javascript
复制网页内容,粘贴之后自动加上网址的实现方法(脚本之家特别整理)
2014/10/16 Javascript
浅谈js中的闭包
2015/03/16 Javascript
js中this用法实例详解
2015/05/05 Javascript
JavaScript中的parse()方法使用简介
2015/06/12 Javascript
jQuery ajax中使用confirm,确认是否删除的简单实例
2016/06/17 Javascript
jQuery EasyUI tree 使用拖拽时遇到的错误小结
2016/10/10 Javascript
微信小程序-小说阅读小程序实例(demo)
2017/01/12 Javascript
vue中的inject学习教程
2019/04/24 Javascript
JS实现秒杀倒计时特效
2020/01/02 Javascript
原生JS实现pc端轮播图效果
2020/12/21 Javascript
python+numpy实现的基本矩阵操作示例
2019/07/19 Python
python Event事件、进程池与线程池、协程解析
2019/10/25 Python
python中sympy库求常微分方程的用法
2020/04/28 Python
美国滑雪板和装备购物网站:Skis.com
2018/12/20 全球购物
澳大利亚购买最佳炊具品牌网站:Cookware Brands
2019/02/16 全球购物
英国的领先快速时尚零售商:In The Style
2019/03/25 全球购物
作风建设演讲稿
2014/05/23 职场文书
新教师岗前培训方案
2014/06/05 职场文书
计划生育宣传标语
2014/06/21 职场文书
领导干部作风建设工作总结
2014/10/23 职场文书
2015关于重阳节的演讲稿
2015/03/20 职场文书
2015公司年度工作总结
2015/05/14 职场文书
立案决定书范文
2015/06/24 职场文书
Pycharm 如何设置HTML文件自动补全代码或标签
2021/05/21 Python