- 浏览: 160872 次
- 性别:
- 来自: 杭州
文章分类
最新评论
在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 751实时编辑表格 -
手把手教你在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 735strpos() - Find the position ... -
php oracle CLOB
2013-03-05 10:49 21541.php insert oracle 的CLOB字段 ... -
ckeditor配置
2013-04-09 15:42 1175// 界面语言,默认为 'en'config.langua ... -
格式化文件大小
2013-04-09 15:41 826function formatBytes($bytes) ... -
PHP显示Deprecated: Assigning the return value of new by reference is deprecated in
2013-04-09 15:41 898昨晚用Spreadsheet_Excel_Rea ... -
PHP的位运算
2013-01-09 10:34 837$a & $b and(按位与) $a | $b o ... -
cookie和会话(三)
2012-12-10 22:30 8821:如何传输会话ID 会 ... -
cookie和会话(二)
2012-12-07 23:34 1707会话 除了能够在客户机和服务器之间发送少量信息外,还 ... -
cookie和会话(一)
2012-12-05 23:04 1360cookie解决了跟踪各个访问者或用户,服务器利用cook ... -
php+jquery+ajax+json简单小例子
2012-11-22 23:52 75037直接贴代码: <html> <titl ... -
PECR
2012-11-20 22:13 985经常使用的分隔符是正斜线(/), hash符号(#) 以 ... -
几个经典函数
2012-11-20 00:19 9331:是否为邮件 function is_email($em ... -
html2fpdf HTML转换为PDF
2012-11-14 12:33 6482下载html2fpdf包: downurl:http://s ... -
检查浏览器版本类
2012-11-09 13:11 770class BrowserDetector { var $U ... -
匹配链接
2012-10-30 11:43 807有一段类似下面的代码,匹配所有的链接地址: $code = ... -
PHP获取类名及所有函数名
2012-08-24 11:48 11763PHP获取类名及所有函数名1.获取行号、文件路径文件名、类名、 ... -
获取<meta>中的content标签内容
2012-02-24 09:04 2028php函数:$tags = get_meta_tags ( ' ...
相关推荐
自个用的一个小工具,比如将 “\u6C49\u5B57\u7F16\u7801\u8F6C\u6362” 转为“汉字编码转换”。要能看得懂描述对你可能有用,如果看不懂说明没有用。 附带简单的正则表达式测试:match和test方法的测试和语法介绍。
JS将数字转换为大写汉字人民币
// 简单的高效的汉字转拼音、拼音转汉字类 // 包含20441个汉字26821拼音转换库文件,字库基本是网上最全的了,当然万一发现少了可以自己加入到字库中,一行一条记录加入到文本文件中即可,非常简单 // 算法方面没有...
利用正则表达式,匹配中文字符的正则表达式,利用正则表达式分解和转换IP地址
中文/拼音首字母匹配中国城市名 js检索方式词条的存储/更新
php汉字转拼音 降汉字转换为拼音,utf-8 拼音非常全,基本都能匹配
1.版本:matlab2022A,包含仿真操作录像和代码中文注释,操作录像使用windows media player播放。 2.领域:手写数字检测 3.内容: 基于图像形态学处理和模板匹配的手写数字检测算法。 plot(tX, tY,'r','LineWidth'...
支持delphi6至delphi xe7,支持汉字、生僻字、中文简体、中文繁体、gbk,gb2312,unicode,utf8转为拼音,亲测有效。 //获取指定汉字的拼音索引字母,如:汉 = h。多音字返回多个声母,如:行 = hx function ...
NULL 博文链接:https://wuxiangqian.iteye.com/blog/1426339
汉字转拼音很多地方要用到,比如联系人按姓氏首字母排序,拨号盘的模糊匹配,其他检索等都要用到汉字转拼音。 由于汉字在系统中的存储与它对应的拼音没有什么关系,目前汉字转拼音是通过一个汉字和拼音的对照库进行...
sqlserver 存储过程转拼音首字母 C#转拼音首字母和全拼
用C++写的汉字转拼音的例子。输入汉字后输出为拼音。可以做文字匹配
anndroid搜索功能通讯录字母匹配,模糊查询功能实现,汉字转拼音
例子很简单,主要用到了一个拼音的字典,修正了一些汉字,数据库CSZ,表NameInfo,字段Name_CN,Name_PinYin
C# 汉字转拼音缩写源码,用于联想输入匹配。
2. [ ] 根据拼音序列,智能匹配,转句子。 5. [ ] 可扩展词库。 4. [ ] LRU Cache,可选策略。 5. [ ] 尝试优化Sqlite查询性能。 6. [ ] 尝试提供一个可选功能,用户可启动通过预加载常用数据到内存的方式提升性能。...
本文实例讲述了Python正则表达式匹配中文用法。分享给大家供大家参考,具体如下: #!/usr/bin/python #-*- coding:cp936-*-#思路,将str转换成unicode,方可用正则表达式,前提是,要知道文件的编码,本例中是gbk ...
SIFT特征匹配算法-SIFT.rar SIFT:Scale Invariant Feature Transform SIFT特征匹配算法是目前国内外特征点匹配研究领域的热点与难点,其匹配能力较强,可以处理两幅图像之间发生平...附件中有SIFT原文、中文文献。
Unity RT-Voice PRO 2020.1.2文字转语言(支持中文) 功能 将文本转换为语音 • 即时从文本转换到语音 — 在运行时即可生成! • 连带作用:连续的音频生成可节省大量内存! • 在游戏的测试阶段无需配音演员! • 按...