Php - 正则表达式检查字符串是否有中文字符

回答 4 浏览 2.6万 2011-02-07

我有字符串$str,我想检查它的内容是否有中文字符(真/假)

$str = "赕就可消垻,只有当所有方块都被消垻时才可以过关";

能否请您帮助我?

谢谢你!阿德里安

Adrian 提问于2011-02-07
这是用什么字符集?是UTF-8还是本地的?Pekka 2011-02-07
@Pekka 我试过了,但对我来说没有用。Adrian 2011-02-07
检查该文本是否仅仅包含一些汉字(与其他非汉字一起)? 还是完全由汉字组成?Mark Baker 2011-02-07
在这种情况下,请使用mario的解决方案,不要忘记接受他的答案。Mark Baker 2011-02-07
4 个回答
#1楼 已采纳
得票数 70

你可以使用一个unicode字符类http://www.regular-expressions.info/unicode.html

preg_match("/\p{Han}+/u", $utf8_str);

这只是检查是否存在至少一个中文字符。如果你想匹配完整的字符串,你可能想在此基础上扩展。

mario 提问于2011-02-07
mario 修改于2011-02-07
很好的回答。我不知道你可以通过regex来识别unicode!Peter 2011-02-07
@Peter:这有点新。取决于版本,但从PHP4开始应该会捆绑一个兼容Unicode的PCRE_VERSIONmario 2011-02-07
IIRC,这也取决于服务器上的PCRE库是否启用了Unicode处理。但它应该存在于大多数现代服务器上。Pekka 2011-02-07
@Pekka: 啊,不错,即时升级!,这确实是一个共享库。(可能取决于构建参数。PHP 5.3.3仍然捆绑着2008年的过时的libpcre 7.8版本)。mario 2011-02-07
这个答案非常好。Chapeau.Jamie Hollern 2017-09-19
#2楼
得票数 3

@mario的答案是正确的!

对于中文字符,使用这个词组。/[\x{4e00}-\x{9fa5}]+/u

而且别忘了u修饰语!

关于u修改器 参考文献

TKS 到马里奥

eaglewu 提问于2014-08-30
Darshan Lila 修改于2014-08-30
#3楼
得票数 2
preg_match("/^\p{Han}{2,10}+$/u", $str);

使用/^p{Han}{2,10}+$/u只允许使用中文字符的重合搜索。

  1. 它只允许使用中文字符&。
  2. 它允许最少2个字符&。
  3. 它最多允许10个字符

你可以根据你的需要,通过改变{2,10}来改变最小和最大的字符。

@p& /u是非常重要的添加,请不要避免添加。

Newton Singh 提问于2017-11-22
Newton Singh 修改于2019-01-15
#4楼
得票数 1

这个链接到一个关于识别简体中文或繁体中文的问题,可能会给你一些想法......你实际上没有说明你指的是哪一种,而我对中文的了解也不足以辨别其中的区别。

Mark Baker 提问于2011-02-07
Community 修改于2017-05-23
嘿,这是个好主意,而且比Unicode Regex的依赖性更小。+1Pekka 2011-02-07
@Pekka - 我必须承认,我很惊讶它真的起作用了(即使它确实需要bobince在实际字符集方面提供一点帮助)....,这只是我从未有机会在实践中尝试的那些理论中的一个。Mark Baker 2011-02-07
标签