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 相关文章推荐
php下将图片以二进制存入mysql数据库中并显示的实现代码
May 27 PHP
兼容firefox,chrome的网页灰度效果
Aug 08 PHP
php类中private属性继承问题分析
Nov 01 PHP
使用Smarty 获取当前日期时间和格式化日期时间的方法详解
Jun 18 PHP
解析php根据ip查询所在地区(非常有用,赶集网就用到)
Jul 01 PHP
适用于抽奖程序、随机广告的PHP概率算法实例
Apr 09 PHP
分享一个php 的异常处理程序
Jun 22 PHP
php读取远程gzip压缩网页的方法
Dec 29 PHP
php计划任务之ignore_user_abort函数实现方法
Jan 08 PHP
WordPress中的shortcode短代码功能使用详解
May 17 PHP
Laravel5.0+框架邮件发送功能实现方法图文与实例详解
Apr 23 PHP
PHP设计模式之组合模式定义与应用示例
Feb 01 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
Windows下的PHP安装pear教程
2014/10/24 PHP
smarty高级特性之过滤器的使用方法
2015/12/25 PHP
Javascript 篱式条件判断
2008/08/22 Javascript
js解析与序列化json数据(一)json.stringify()的基本用法
2013/02/01 Javascript
js鼠标滑过图片震动特效的方法
2015/02/17 Javascript
利用js实现禁止复制文本信息
2015/06/03 Javascript
JavaScript中length属性的使用方法
2015/06/05 Javascript
JavaScript操作XML文件之XML读取方法
2015/06/09 Javascript
JavaScript实现跑马灯抽奖活动实例代码解析与优化(二)
2016/02/16 Javascript
js中判断变量类型函数typeof的用法总结
2016/08/09 Javascript
JS复制对应id的内容到粘贴板(Ctrl+C效果)
2017/01/23 Javascript
基于nodejs+express4.X实现文件下载的实例代码
2017/07/13 NodeJs
Vuejs 页面的区域化与组件封装的实现
2017/09/11 Javascript
JS库particles.js创建超炫背景粒子插件(附源码下载)
2017/09/13 Javascript
JS简单实现点击跳转登陆邮箱功能的方法
2017/10/31 Javascript
细说webpack源码之compile流程-rules参数处理技巧(2)
2017/12/26 Javascript
Vue项目中如何引入icon图标
2018/03/28 Javascript
vue中element 上传功能的实现思路
2018/07/06 Javascript
vue后台管理之动态加载路由的方法
2018/08/13 Javascript
vue-cli3环境变量与分环境打包的方法示例
2019/02/18 Javascript
Python中计算三角函数之cos()方法的使用简介
2015/05/15 Python
python实现爬虫统计学校BBS男女比例(一)
2015/12/31 Python
谈谈python中GUI的选择
2018/03/01 Python
opencv导入头文件时报错#include的解决方法
2019/07/31 Python
python打开使用的方法
2019/09/30 Python
Python基于内置库pytesseract实现图片验证码识别功能
2020/02/24 Python
详解python tcp编程
2020/08/24 Python
英国购买威士忌网站:Master of Malt
2019/09/26 全球购物
寄语十八大感言
2014/02/07 职场文书
教师节促销方案
2014/03/22 职场文书
售后服务承诺书模板
2014/05/21 职场文书
学校创先争优活动总结
2014/08/28 职场文书
2015年教师工作总结范文
2015/03/31 职场文书
PHP使用非对称加密算法RSA
2021/04/21 PHP
梳理总结Python开发中需要摒弃的18个坏习惯
2022/01/22 Python
Android开发实现极为简单的QQ登录页面
2022/04/24 Java/Android