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 URL地址获取函数代码(端口等) 推荐
May 15 PHP
PHP JSON 数据解析代码
May 26 PHP
PHP中文分词 自动获取关键词介绍
Nov 13 PHP
PHP遍历文件夹与文件类及处理类用法实例
Sep 23 PHP
PHP将HTML转换成文本的实现代码
Jan 21 PHP
php中 $$str 中 &quot;$$&quot; 的详解
Jul 06 PHP
php根据生日计算年龄的方法
Jul 13 PHP
php基于session实现数据库交互的类实例
Aug 03 PHP
php实现批量修改文件名称的方法
Jul 23 PHP
PHP内置加密函数详解
Nov 20 PHP
PHP配置ZendOpcache插件加速
Feb 14 PHP
PHP Include文件实例讲解
Feb 15 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
simplehtmldom Doc api帮助文档
2012/03/26 PHP
PHP中数字检测is_numeric与ctype_digit的区别介绍
2012/10/04 PHP
php如何解决无法上传大于8M的文件问题
2014/03/10 PHP
PHP整合PayPal支付
2015/06/11 PHP
YII Framework框架教程之国际化实现方法
2016/03/14 PHP
Zend Framework数据库操作技巧总结
2017/02/18 PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
2020/03/24 PHP
js异或加解密效果代码
2008/06/25 Javascript
Javascript中的Array数组对象详谈
2014/03/03 Javascript
JQuery EasyUI 加载两次url的原因分析及解决方案
2014/08/18 Javascript
jQuery实现图片渐入渐出切换展示效果
2015/08/15 Javascript
javascript html5 canvas实现可拖动省份的中国地图
2016/03/11 Javascript
一个Js文件函数中调用另一个Js文件函数的方法演示
2017/08/14 Javascript
AngularJS+Bootstrap3多级导航菜单的实现代码
2017/08/16 Javascript
在 Typescript 中使用可被复用的 Vue Mixin功能
2018/04/17 Javascript
Vuex入门到上手教程
2018/06/20 Javascript
原生JS实现的自动轮播图功能详解
2018/12/28 Javascript
layer设置maxWidth及maxHeight解决方案
2019/07/26 Javascript
vue监听键盘事件的相关总结
2021/01/29 Vue.js
浅析Python中的多重继承
2015/04/28 Python
python PyTorch预训练示例
2018/02/11 Python
详解用TensorFlow实现逻辑回归算法
2018/05/02 Python
Python字典创建 遍历 添加等实用基础操作技巧
2018/09/13 Python
将keras的h5模型转换为tensorflow的pb模型操作
2020/05/25 Python
open_basedir restriction in effect. 原因与解决方法
2021/03/14 PHP
CSS3 rgb and rgba(透明色)的使用详解
2020/09/25 HTML / CSS
HTML5 图片预加载的示例代码
2020/03/25 HTML / CSS
Bally巴利中国官网:经典瑞士鞋履、手袋及配饰奢侈品牌
2018/10/09 全球购物
考博专家推荐信模板
2013/12/02 职场文书
汽车服务工程专业自荐信
2014/09/02 职场文书
离婚协议书范本(2014版)
2014/09/28 职场文书
村干部群众路线整改措施思想汇报
2014/10/12 职场文书
与死神共舞观后感
2015/06/15 职场文书
解除租赁合同协议书
2016/03/21 职场文书
Golang 语言控制并发 Goroutine的方法
2021/06/30 Golang
HTML5+CSS+JavaScript实现捉虫小游戏设计和实现
2021/10/16 HTML / CSS