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 相关文章推荐
社区(php&amp;&amp;mysql)三
Oct 09 PHP
IIS6+PHP5+MySQL5+Zend Optimizer+phpMyAdmin安装配置图文教程 2009年
Jun 08 PHP
PHP之COOKIE支持详解
Sep 20 PHP
新手学习PHP的一些基础知识分享
Jul 27 PHP
PHP反射机制用法实例
Aug 28 PHP
php中静态类与静态变量用法的区别分析
Jan 15 PHP
php编写批量生成不重复的卡号密码代码
May 14 PHP
PHP的APC模块实现上传进度条
Oct 27 PHP
[原创]php常用字符串输出方法分析(echo,print,printf及sprintf)
Jul 09 PHP
php封装单文件上传到数据库(路径)
Oct 15 PHP
PHP命名空间定义与用法实例分析
Aug 14 PHP
laravel框架查询数据集转为数组的两种方法
Oct 10 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用户注册页面利用js进行表单验证具体实例
2013/10/17 PHP
php对二维数组进行排序的简单实例
2013/12/19 PHP
PHP制作图形验证码代码分享
2014/10/23 PHP
Zend Framework教程之响应对象的封装Zend_Controller_Response实例详解
2016/03/07 PHP
PHP中error_reporting函数用法详细介绍
2017/06/11 PHP
Aliyun Linux 编译安装 php7.3 tengine2.3.2 mysql8.0 redis5的过程详解
2020/10/20 PHP
jQuery实现冻结表头的方法
2015/03/09 Javascript
详解javascript数组去重问题
2015/11/06 Javascript
详解javascript实现瀑布流绝对式布局
2016/01/29 Javascript
jQuery简单动画变换效果实例分析
2016/07/04 Javascript
AngularJS基础 ng-class-odd 指令示例
2016/08/01 Javascript
js如何判断是否在iframe中及防止网页被别站用iframe嵌套
2017/01/11 Javascript
vue.js父子组件通信动态绑定的实例
2018/09/28 Javascript
javascript头像上传代码实例
2019/09/28 Javascript
通过微信公众平台获取公众号文章的方法示例
2019/12/25 Javascript
[48:24]完美世界DOTA2联赛PWL S3 Forest vs INK ICE 第一场 12.09
2020/12/12 DOTA
Eclipse + Python 的安装与配置流程
2013/03/05 Python
在交互式环境中执行Python程序过程详解
2019/07/12 Python
Python基于yield遍历多个可迭代对象
2020/03/12 Python
三步解决python PermissionError: [WinError 5]拒绝访问的情况
2020/04/22 Python
Python-opencv实现红绿两色识别操作
2020/06/04 Python
html5 worker 实例(一) 为什么测试不到效果
2013/06/24 HTML / CSS
美国职棒大联盟官方网上商店:MLBShop.com
2017/11/12 全球购物
JD Sports澳洲官网:英国领先的运动鞋和运动时尚零售商
2020/02/15 全球购物
房地产项目策划书
2014/02/05 职场文书
运动会闭幕式解说词
2014/02/21 职场文书
建筑结构施工专业推荐信
2014/02/21 职场文书
市级绿色学校申报材料
2014/08/25 职场文书
2014副局长群众路线对照检查材料思想汇报
2014/09/22 职场文书
房屋转让协议书
2014/10/18 职场文书
2014年酒店前台工作总结
2014/11/14 职场文书
工作失职检讨书范文
2015/05/05 职场文书
学校少先队工作总结
2015/08/12 职场文书
大学生自我鉴定怎么写
2019/05/07 职场文书
解决mysql:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO/YES)
2021/06/26 MySQL
继承Win10缺点!教你关闭Win11烦人的网络搜索
2021/11/23 数码科技