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实现文件安全下载
Oct 09 PHP
修改了一个很不错的php验证码(支持中文)
Feb 14 PHP
php中使用Curl、socket、file_get_contents三种方法POST提交数据
Aug 12 PHP
php获取bing每日壁纸示例分享
Feb 25 PHP
PHP中date与gmdate的区别及默认时区设置
May 12 PHP
php修改指定文件后缀的方法
Sep 11 PHP
php静态文件返回304技巧分享
Jan 06 PHP
PHP实现可自定义样式的分页类
Mar 29 PHP
php插件Xajax使用方法详解
Aug 31 PHP
Yii框架组件的事件机制原理与用法分析
Apr 07 PHP
PHP程序守护进程化实现方法详解
Jul 16 PHP
ThinkPHP 5 AJAX跨域请求头设置实现过程解析
Oct 28 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中的类-什么叫类
2006/11/20 PHP
php面向对象全攻略 (二) 实例化对象 使用对象成员
2009/09/30 PHP
PHP生成唯一订单号
2015/07/05 PHP
在Mac OS上搭建Nginx+PHP+MySQL开发环境的教程
2015/12/21 PHP
PHP使用Http Post请求发送Json对象数据代码解析
2020/07/16 PHP
javascript 实现字符串反转的三种方法
2013/11/23 Javascript
javascript中数组中求最大值示例代码
2013/12/18 Javascript
jQuery Easyui实现左右布局
2016/01/26 Javascript
JavaScript常用本地对象小结
2016/03/28 Javascript
jQuery根据name属性进行查找的用法分析
2016/06/23 Javascript
原生态js,鼠标按下后,经过了那些单元格的简单实例
2016/08/11 Javascript
运用js教你轻松制作html音乐播放器
2020/04/17 Javascript
浅谈React 属性和状态的一些总结
2016/11/21 Javascript
Node.js复制文件的方法示例
2016/12/29 Javascript
Vue2.0 UI框架ElementUI使用方法详解
2017/04/14 Javascript
分析JavaScript数组操作难点
2017/12/18 Javascript
从vue源码看props的用法
2019/01/09 Javascript
JS/jQuery实现简单的开关灯效果【案例】
2019/02/19 jQuery
移动端底部导航固定配合vue-router实现组件切换功能
2019/06/13 Javascript
基于layui table返回的值的多级嵌套的解决方法
2019/09/19 Javascript
[01:04:48]VGJ.S vs TNC Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
Python 利用邮件系统完成远程控制电脑的实现(关机、重启等)
2019/11/19 Python
django 中使用DateTime常用的时间查询方式
2019/12/03 Python
Python Numpy中数据的常用保存与读取方法
2020/04/01 Python
Python导入数值型Excel数据并生成矩阵操作
2020/06/09 Python
python logging模块的使用
2020/09/07 Python
The Hut美国/加拿大:英国领先的豪华在线百货商店
2019/03/26 全球购物
使用useBean标志初始化BEAN时如何接受初始化参数
2012/02/11 面试题
如何获得EntityManager
2014/02/09 面试题
甜点店创业计划书
2014/01/27 职场文书
小学生一分钟演讲稿
2014/08/26 职场文书
2014年政协工作总结
2014/12/09 职场文书
给老师的感谢信
2015/01/20 职场文书
国情备忘录观后感
2015/06/04 职场文书
幼儿园开学温馨提示
2015/07/15 职场文书
浅谈Python中的正则表达式
2021/06/28 Python