UTF-8正则表达式如何匹配汉字


Posted in PHP onAugust 03, 2015

判断输入内容是否含有违法字符,请看下面代码

$str = "编程";
// if(!preg_match("/^[\x{4e00}-\x{9fa5}A-Za-z0-9_]+$/u",$str)) 
//UTF-8汉字字母数字下划线正则表达式
if(!preg_match("/^[\x{4e00}-\x{9fa5}]+$/u",$str)) //UTF-8汉字字母数字下划线正则表达式
 { 
  echo "<font color=red>您输入的[".$str."]含有违法字符</font>"; 
 }
 else 
 {
  echo "<font color=green>您输入的[".$str."]完全合法,通过!</font>"; 

 }

-----------------------

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中UTF-8正则表达式如何匹配汉字的全部内容,希望大家喜欢。

PHP 相关文章推荐
实用函数9
Nov 08 PHP
php 什么是PEAR?(第二篇)
Mar 19 PHP
php空间不支持socket但支持curl时recaptcha的用法
Nov 07 PHP
php文件怎么打开 如何执行php文件
Dec 21 PHP
php 生成短网址原理及代码
Jan 23 PHP
JavaScript创建命名空间的5种写法
Jun 24 PHP
php最简单的删除目录与文件实现方法
Nov 28 PHP
php中实现用数组妩媚地生成要执行的sql语句
Jul 10 PHP
yii2框架中使用下拉菜单的自动搜索yii-widget-select2实例分析
Jan 09 PHP
php数据库操作model类(使用__call方法)
Nov 16 PHP
Laravel 中使用 Vue.js 实现基于 Ajax 的表单提交错误验证操作
Jun 30 PHP
PHP高并发和大流量解决方案整理
Dec 24 PHP
PHP使用缓存即时输出内容(output buffering)的方法
Aug 03 #PHP
php中ob函数缓冲机制深入理解
Aug 03 #PHP
如何利用http协议发布博客园博文评论
Aug 03 #PHP
在CentOS上搭建LAMP+vsftpd环境的简单指南
Aug 01 #PHP
如何使用php实现评委评分器
Jul 31 #PHP
php给图片加文字水印
Jul 31 #PHP
初识通用数据库操作类――前端easyui-datagrid,form(php)
Jul 31 #PHP
You might like
千呼万唤始出来,DOTA2勇士令状不朽宝藏Ⅱ现已推出
2020/08/25 DOTA
php部分常见问题总结
2008/03/27 PHP
php数组函数序列之array_unshift() 在数组开头插入一个或多个元素
2011/11/07 PHP
调整PHP的性能
2013/10/30 PHP
php伪静态之APACHE篇
2014/06/02 PHP
php计划任务之ignore_user_abort函数实现方法
2015/01/08 PHP
php实现点击可刷新验证码
2015/11/07 PHP
一键生成各种尺寸Icon的php脚本(实例)
2017/02/08 PHP
javascript中的作用域scope介绍
2010/12/28 Javascript
js取两个数组的交集|差集|并集|补集|去重示例代码
2013/08/07 Javascript
整理的比较全的event对像在ie与firefox浏览器中的区别
2013/11/25 Javascript
浅谈jQuery中replace()方法
2015/05/13 Javascript
让你一句话理解闭包(简单易懂)
2016/06/03 Javascript
jQuery之简单的表单验证实例
2016/07/07 Javascript
AngularJS基础 ng-submit 指令简单示例
2016/08/03 Javascript
浅述Javascript的外部对象
2016/12/07 Javascript
js仿淘宝评价评分功能
2017/02/28 Javascript
angularjs项目的页面跳转如何实现(5种方法)
2017/05/25 Javascript
BootStrap daterangepicker 双日历控件
2017/06/02 Javascript
Vue项目自动转换 px 为 rem的实现方法
2018/10/29 Javascript
JavaScript 变量,数据类型基础实例详解【变量、字符串、数组、对象等】
2020/01/04 Javascript
jQuery实现简单评论区功能
2020/10/26 jQuery
[38:21]2018DOTA2亚洲邀请赛3月30日 小组赛A组 LGD VS Newbee
2018/03/31 DOTA
[01:31:03]DOTA2完美盛典全回顾 见证十五项大奖花落谁家
2017/11/28 DOTA
python实现媒体播放器功能
2018/02/11 Python
11个Python Pandas小技巧让你的工作更高效(附代码实例)
2019/04/30 Python
Django之form组件自动校验数据实现
2020/01/14 Python
python关于变量名的基础知识点
2020/03/03 Python
python中常见错误及解决方法
2020/06/21 Python
浅谈Html5页面打开app的一些思考
2020/03/30 HTML / CSS
AMAVII眼镜官网:时尚和设计师太阳镜
2019/05/05 全球购物
HolidayLettings英国:预订最好的度假公寓、别墅和自助式住宿
2019/08/27 全球购物
实现strstr功能,即在父串中寻找子串首次出现的位置
2016/08/05 面试题
CNC数控操作工岗位职责
2013/11/19 职场文书
土建专业大学生自荐信范文
2014/04/09 职场文书
主持人大赛开场白
2015/05/29 职场文书