- 浏览: 163110 次
- 性别:
- 来自: 杭州
文章分类
最新评论
在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>
(转)
发表评论
-
实时编辑表格
2014-06-03 10:08 827实时编辑表格 -
手把手教你在Ubuntu上安装Apache、MySql和PHP
2013-07-11 15:25 01:首先安装apache:打开终端(ctrl+Alt+t), ... -
正则取a
2013-04-17 16:29 0<a[^>]*href=["'](?[^ ... -
操作字符串
2013-04-09 15:42 778strpos() - Find the position ... -
php oracle CLOB
2013-03-05 10:49 22271.php insert oracle 的CLOB字段 ... -
ckeditor配置
2013-04-09 15:42 1227// 界面语言,默认为 'en'config.langua ... -
格式化文件大小
2013-04-09 15:41 860function formatBytes($bytes) ... -
PHP显示Deprecated: Assigning the return value of new by reference is deprecated in
2013-04-09 15:41 934昨晚用Spreadsheet_Excel_Rea ... -
PHP的位运算
2013-01-09 10:34 873$a & $b and(按位与) $a | $b o ... -
cookie和会话(三)
2012-12-10 22:30 9071:如何传输会话ID 会 ... -
cookie和会话(二)
2012-12-07 23:34 1734会话 除了能够在客户机和服务器之间发送少量信息外,还 ... -
cookie和会话(一)
2012-12-05 23:04 1397cookie解决了跟踪各个访问者或用户,服务器利用cook ... -
php+jquery+ajax+json简单小例子
2012-11-22 23:52 75093直接贴代码: <html> <titl ... -
PECR
2012-11-20 22:13 1008经常使用的分隔符是正斜线(/), hash符号(#) 以 ... -
几个经典函数
2012-11-20 00:19 9591:是否为邮件 function is_email($em ... -
html2fpdf HTML转换为PDF
2012-11-14 12:33 6521下载html2fpdf包: downurl:http://s ... -
检查浏览器版本类
2012-11-09 13:11 795class BrowserDetector { var $U ... -
匹配链接
2012-10-30 11:43 837有一段类似下面的代码,匹配所有的链接地址: $code = ... -
PHP获取类名及所有函数名
2012-08-24 11:48 11799PHP获取类名及所有函数名1.获取行号、文件路径文件名、类名、 ... -
获取<meta>中的content标签内容
2012-02-24 09:04 2067php函数:$tags = get_meta_tags ( ' ...
相关推荐
本文将深入探讨易语言中的正则表达式匹配中文的原理、方法以及应用。 正则表达式(Regular Expression)是一种模式匹配的语言,用于描述一种字符串的集合。在易语言中,我们可以通过内置的字符串函数来实现正则...
中文模糊匹配算法是信息检索系统中的一个重要组成部分,特别是在处理大量中文数据时,它能帮助用户在不完全准确的输入条件下找到所需的信息。这种技术主要针对的是用户可能输入的拼写错误、同音词或者简略语等不精确...
中文文本相似度匹配在信息技术领域是一项重要的任务,特别是在搜索引擎、推荐系统、文本分类以及信息检索中扮演着关键角色。本文将深入探讨其中两种常见的技术:simHash算法和海明距离,以及它们在中文文本处理中的...
项目下载解压后,项目名字和项目路径不要用中文,建议解压重命名为英文名字后再运行!有问题私信沟通,祝顺利! 适用于Windows和Linux系统-基于OpenCV和C++开发的模板匹配库源码(支持旋转匹配、跨平台使用).zip适用...
本资料提供了一份详细的汉字与拼音对应的键值对表,旨在帮助开发者实现汉字到拼音的自动匹配功能。这对于开发支持中文输入法的应用程序尤其有用。 #### 二、数据结构解析 该表采用了键值对的形式来存储汉字与拼音...
"易语言匹配中文"这个主题,主要涉及的是如何在易语言中使用正则表达式来匹配中文字符。 正则表达式(Regular Expression)是一种强大的文本处理工具,它允许我们用一种简洁的模式来匹配或查找字符串。在易语言中,...
- **语音识别**: 语音转文字的过程中,映射表可以帮助将语音转换成对应的汉字文本。 ##### 2. **模糊匹配算法** - **概念**: 模糊匹配是指在不完全匹配的情况下找到最接近的结果。对于拼音汉字映射来说,即使用户...
这个“模拟手写板自动匹配汉字符号”的项目,显然是为了实现一个功能强大的手写输入系统,能够识别并自动匹配用户的汉字书写。 首先,我们要理解手写板的工作原理。手写板通常配备有压力感应和位置跟踪技术,它会...
例如,如果一个程序需要对中文字符进行排序,或者在没有输入法的情况下通过英文键盘输入中文,汉字转拼音就显得尤为重要。 "C#汉字转拼音(npinyin)"是一个C#库,它提供了一个方便的方式来将汉字转换为对应的汉语...
本文将深入探讨如何实现一个基于JavaFX的模糊查询系统,该系统支持汉字、拼音以及拼音首字母的左侧匹配。这个功能对于提高用户在大量中文数据中查找信息的效率至关重要。 首先,我们需要了解JavaFX这一强大的Java...
在IT领域,中文汉字转拼音是一项常见的处理任务,特别是在自然语言处理、文本分析以及编程中。这个任务的主要目的是将汉字转换成对应的汉语拼音,以便计算机能够更好地理解和处理中文信息。以下将详细介绍汉字转拼音...
通过计算待识别汉字的HOG特征与模板库中每个模板的相似度,我们可以找到最匹配的模板,从而识别出汉字。 3. **MATLAB 2014a**: MATLAB是一款广泛使用的数值计算和编程环境,尤其适合进行科学计算和数据分析。在这...
在这段代码中,我们首先假设`str`变量中的内容是由于源编码与目标编码不匹配而产生的乱码。接下来,我们使用`Encoding.GetEncoding()`方法获取源编码ISO-8859-1和目标编码GB2312的实例。然后,通过`GetBytes()`方法...
在MySQL中实现中文汉字转拼音的功能,主要是为了方便在数据库查询和数据分析时处理中文文本,尤其是在没有全文索引或者需要进行复杂模糊匹配时。以下是一个简单的实现方法,它利用自定义函数来完成这一任务。 首先...
模糊匹配算法在信息技术领域中广泛应用于数据搜索、文本相似性检测和信息检索等多个场景。Java作为一种流行的编程语言,提供了丰富的库和工具来实现各种模糊匹配算法。本篇将深入探讨如何使用Java实现模糊匹配,并...
在IT行业中,汉字转换拼音是一项重要的...总的来说,汉字转换拼音技术是中文信息处理的重要基础,而这个工具或库则提供了便捷的汉字到拼音和拼音缩写的转换服务,对于开发相关应用的程序员来说,具有很高的实用价值。
### 匹配中文字符的正则表达式 在日常开发工作中,经常需要处理各种各样的字符串,其中就包括中文字符的处理。对于中文字符的匹配,正则表达式是一种非常有效的工具。 #### 正则表达式的概念 正则表达式(Regular...
在IT领域,中文汉字转拼音是一项重要的技术,特别是在处理中文数据、搜索引擎优化(SEO)、语音合成、自动文本处理等方面有着广泛的应用。PHP作为一款流行的服务器端脚本语言,提供了多种方法来实现这一功能。本文将...
一个语音识别模糊匹配的demo,主要工作流程如下: 1,将目标字符集转换为拼音; 2,获取科大讯飞语音识别的结果; 3,将识别结果转换为拼音; 4,在目标拼音集中进行拼音的匹配查找; 5,对于查找不到的,进行易混...
该算法首先利用结巴(jieba)中文分词库对语料库中的地址进行分词,然后利用词向量(Word2vec)模型进行地址词向量训练,最后利用增强序列推理模型(Enhanced Sequential Inference Model,ESIM)进行地址文本语义相似度...