`

(转)匹配中文

    博客分类:
  • php
 
阅读更多

在javascript中,要判断字符串是中文是很简单。比如:
var str = "php编程";
if (/^[\u4e00-\u9fa5]+$/.test(str)) {
alert("该字符串全部是中文");
} else {
alert("该字符串不全部是中文");
}

想当然的,在php中来判断字符串是否为中文,就会沿袭这个思路:
<?php
$str = "php编程";
if (preg_match("/^[\u4e00-\u9fa5]+$/",$str)) {
print("该字符串全部是中文");
} else {
print("该字符串不全部是中文");
}
?>

不过,很快就会发现,php并不支持这样的表达,报错:
Warning: preg_match() [function.preg-match]: Compilation failed: PCRE does not support \L, \l, \N, \U, or \u at offset 3 in test.php on line 3

刚开始从google上查了很多次,想从php正则表达式对于十六进制数据的

表达方式上进行突破,发现在php中,是用\x表示十六进制数据的。于是,

变换成如下的代码:
$str = "php编程";
if (preg_match("/^[\x4e00-\x9fa5]+$/",$str)) {
print("该字符串全部是中文");
} else {
print("该字符串不全部是中文");
}
貌似不报错了,判断的结果也正确,不过把$str换成“编程”两字,结果却

还是显示“该字符串不全部是中文”,看来这样的判断还是不够准确。

后来跑回百度搜“php 匹配汉字 utf 8”,发现文章的匹配程度竟然要比google的高多了,

看来百度的“百度更懂中文”还在一定程度上是正确的。在第二篇文章《★★★ 求UTF8

下匹配汉字的正则, 在线等.........》中看到了如下的一些内容:

楼主zhiin(┈ Jcan ┈)2006-11-15 15:59:30 在 Web 开发 / PHP 提问

求UTF8下匹配汉字的正则, 不包括全角字符及特殊符号!

网上只能找到匹配全角字符的正则: ^[\x80-\xff]*^/
[\u4e00-\u9fa5]可以匹配中文,但是PHP又不支持

郁闷中.......

1 楼PleaseDoTellMeWhy(Allah bless you!)回复于 2006-11-15 16:04:55 得分 11

chr(0xa1) . '-' . chr(0xff)可以匹配所有中文,但是不知道在UTF-8下如何!Top
2 楼zhiin(┈ Jcan ┈)回复于 2006-11-15 16:11:34 得分 0

即使在gb2312下, chr(0xa1) . '-' . chr(0xff) 也不对
它把全角符号也匹配进来了Top
3 楼xuzuning(唠叨)回复于 2006-11-15 16:19:56 得分 90

模式修正符: u

按照这几位提供的线索逐个试了一下,发现还真的如他们所说,可能还跟编码有关系,

因此需要了解一下模式修正符的相关知识——于是继续搜索百度。

在一篇《模式修正符》的文章中了解到:

u (PCRE_UTF8)

此修正符启用了一个 PCRE 中与 Perl 不兼容的额外功能。模式字符串被当成 UTF-8。

本修正符在 Unix 下自 PHP 4.1.0 起可用,在 win32 下自 PHP 4.2.3 起可用。
例子:
preg_match('/[\x{2460}-\x{2468}]/u', $str); 匹配 内码汉字
按照他提供的方式进行测试,代码如下:

$str = "php编程";
if (preg_match("/^[\x{2460}-\x{2468}]+$/u",$str)) {
print("该字符串全部是中文");
} else {
print("该字符串不全部是中文");
}

发现这次依然对是否为中文判断失常。不过,既然\x表示的十六进制数据,

为什么和js里边提供的范围\x4e00-\x9fa5不一样呢?于是我就换成了下边的代码:
$str = "php编程";
if (preg_match("/^[\x4e00-\x9fa5]+$/u",$str)) {
print("该字符串全部是中文");
} else {
print("该字符串不全部是中文");
}
本来以为铁定成功了的事情,没想到,warning又一次产生了:
Warning: preg_match() [function.preg-match]: Compilation failed: invalid UTF-8 string at offset 6 in test.php on line 3
看来又有错误的表达方式了,于是对照了一下那篇文章的表达方式,

给“4e00”和“9fa5”两边分别用"{"和“}”包起来,跑了一遍,发现真的准确了:
$str = "php编程";
if (preg_match("/^[\x{4e00}-\x{9fa5}]+$/u",$str)) {
print("该字符串全部是中文");
} else {
print("该字符串不全部是中文");
}

知道了php中utf-8编码下用正则表达式匹配汉字的最终正确表达式——/^[\x{4e00}-\x{9fa5}]+$/u,

于是我又用这个表达式去百度搜索,发现竟然还真有别人得出过这样正确的结论,只不过通过

常规的方式很难找到而已,而且仅仅搜到有一篇——《用正则删除汉字》,看来互联网上对于

信息的正确性的筛选还是亟待加强的。

ps:对google不死心,也搜索了一下,又发现了一篇文章《php常用》,

还是在百度空间的,呵呵,有意思!
----------------------------------------------------------------------------------------------------------------------------------
参考以上文章写了如下一段测试代码(复制以下代码保存成.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>

(转)

分享到:
评论

相关推荐

    易语言正则表达式匹配中文

    本文将深入探讨易语言中的正则表达式匹配中文的原理、方法以及应用。 正则表达式(Regular Expression)是一种模式匹配的语言,用于描述一种字符串的集合。在易语言中,我们可以通过内置的字符串函数来实现正则...

    中文模糊匹配算法

    中文模糊匹配算法是信息检索系统中的一个重要组成部分,特别是在处理大量中文数据时,它能帮助用户在不完全准确的输入条件下找到所需的信息。这种技术主要针对的是用户可能输入的拼写错误、同音词或者简略语等不精确...

    中文文本相似度匹配算法

    中文文本相似度匹配在信息技术领域是一项重要的任务,特别是在搜索引擎、推荐系统、文本分类以及信息检索中扮演着关键角色。本文将深入探讨其中两种常见的技术:simHash算法和海明距离,以及它们在中文文本处理中的...

    适用于Windows和Linux系统-基于OpenCV和C++开发的模板匹配库源码(支持旋转匹配、跨平台使用).zip

    项目下载解压后,项目名字和项目路径不要用中文,建议解压重命名为英文名字后再运行!有问题私信沟通,祝顺利! 适用于Windows和Linux系统-基于OpenCV和C++开发的模板匹配库源码(支持旋转匹配、跨平台使用).zip适用...

    汉字拼音对应表,输入拼音自动匹配

    本资料提供了一份详细的汉字与拼音对应的键值对表,旨在帮助开发者实现汉字到拼音的自动匹配功能。这对于开发支持中文输入法的应用程序尤其有用。 #### 二、数据结构解析 该表采用了键值对的形式来存储汉字与拼音...

    易语言匹配中文

    "易语言匹配中文"这个主题,主要涉及的是如何在易语言中使用正则表达式来匹配中文字符。 正则表达式(Regular Expression)是一种强大的文本处理工具,它允许我们用一种简洁的模式来匹配或查找字符串。在易语言中,...

    拼音汉字模糊匹配字库(仿google和百度搜索引擎字词库)

    - **语音识别**: 语音转文字的过程中,映射表可以帮助将语音转换成对应的汉字文本。 ##### 2. **模糊匹配算法** - **概念**: 模糊匹配是指在不完全匹配的情况下找到最接近的结果。对于拼音汉字映射来说,即使用户...

    模拟手写板自动匹配汉字符号

    这个“模拟手写板自动匹配汉字符号”的项目,显然是为了实现一个功能强大的手写输入系统,能够识别并自动匹配用户的汉字书写。 首先,我们要理解手写板的工作原理。手写板通常配备有压力感应和位置跟踪技术,它会...

    C#汉字转拼音(npinyin)将中文转换成拼音全文或首字母

    例如,如果一个程序需要对中文字符进行排序,或者在没有输入法的情况下通过英文键盘输入中文,汉字转拼音就显得尤为重要。 "C#汉字转拼音(npinyin)"是一个C#库,它提供了一个方便的方式来将汉字转换为对应的汉语...

    提供汉字、拼音、拼音首字母的模糊查询(匹配左侧)

    本文将深入探讨如何实现一个基于JavaFX的模糊查询系统,该系统支持汉字、拼音以及拼音首字母的左侧匹配。这个功能对于提高用户在大量中文数据中查找信息的效率至关重要。 首先,我们需要了解JavaFX这一强大的Java...

    中文汉字转拼音 大写(默认) 小写 首字母大写

    在IT领域,中文汉字转拼音是一项常见的处理任务,特别是在自然语言处理、文本分析以及编程中。这个任务的主要目的是将汉字转换成对应的汉语拼音,以便计算机能够更好地理解和处理中文信息。以下将详细介绍汉字转拼音...

    matlab 基于HOG特征值模板匹配的汉字识别

    通过计算待识别汉字的HOG特征与模板库中每个模板的相似度,我们可以找到最匹配的模板,从而识别出汉字。 3. **MATLAB 2014a**: MATLAB是一款广泛使用的数值计算和编程环境,尤其适合进行科学计算和数据分析。在这...

    C# 将中文乱码转换成中文

    在这段代码中,我们首先假设`str`变量中的内容是由于源编码与目标编码不匹配而产生的乱码。接下来,我们使用`Encoding.GetEncoding()`方法获取源编码ISO-8859-1和目标编码GB2312的实例。然后,通过`GetBytes()`方法...

    Mysql中文汉字转拼音的实现(每个汉字转换全拼)

    在MySQL中实现中文汉字转拼音的功能,主要是为了方便在数据库查询和数据分析时处理中文文本,尤其是在没有全文索引或者需要进行复杂模糊匹配时。以下是一个简单的实现方法,它利用自定义函数来完成这一任务。 首先...

    模糊匹配算法java实现

    模糊匹配算法在信息技术领域中广泛应用于数据搜索、文本相似性检测和信息检索等多个场景。Java作为一种流行的编程语言,提供了丰富的库和工具来实现各种模糊匹配算法。本篇将深入探讨如何使用Java实现模糊匹配,并...

    pinyin支持汉字转换拼音,汉字转换拼音缩写

    在IT行业中,汉字转换拼音是一项重要的...总的来说,汉字转换拼音技术是中文信息处理的重要基础,而这个工具或库则提供了便捷的汉字到拼音和拼音缩写的转换服务,对于开发相关应用的程序员来说,具有很高的实用价值。

    匹配中文字符的正则表达式

    ### 匹配中文字符的正则表达式 在日常开发工作中,经常需要处理各种各样的字符串,其中就包括中文字符的处理。对于中文字符的匹配,正则表达式是一种非常有效的工具。 #### 正则表达式的概念 正则表达式(Regular...

    中文汉字转拼音

    在IT领域,中文汉字转拼音是一项重要的技术,特别是在处理中文数据、搜索引擎优化(SEO)、语音合成、自动文本处理等方面有着广泛的应用。PHP作为一款流行的服务器端脚本语言,提供了多种方法来实现这一功能。本文将...

    Android语音识别模糊匹配demo

    一个语音识别模糊匹配的demo,主要工作流程如下: 1,将目标字符集转换为拼音; 2,获取科大讯飞语音识别的结果; 3,将识别结果转换为拼音; 4,在目标拼音集中进行拼音的匹配查找; 5,对于查找不到的,进行易混...

    基于深度学习地址模糊匹配算法

    该算法首先利用结巴(jieba)中文分词库对语料库中的地址进行分词,然后利用词向量(Word2vec)模型进行地址词向量训练,最后利用增强序列推理模型(Enhanced Sequential Inference Model,ESIM)进行地址文本语义相似度...

Global site tag (gtag.js) - Google Analytics