PHP - 正则表达式检查字符串是否包含中文字符

31

我有一个字符串$str,我想检查它的内容是否包含中文字符(是/否)

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

你能帮我一下吗?

谢谢! Adrian


1
这是什么字符集?UTF-8还是本地字符集之一? - Pekka
可能是重复的问题:在字符串中检测中文(多字节)字符 - Pekka
@Pekka 我试过了,但对我没用。 - Adrian
检查文本是否仅包含一些中文字符(与其他非中文字符)?还是完全由中文字符组成? - Mark Baker
@Mark Baker 字符串可以是中文和英文的混合,例如。 - Adrian
1
在这种情况下,请使用Mario的解决方案,并不要忘记接受他的答案。 - Mark Baker
4个回答

70

好的回答。我不知道你可以通过正则表达式识别Unicode! - Peter
@Peter:有点近期。取决于版本,但是与Unicode兼容的PCRE_VERSION应该自PHP4起就打包了。 - mario
如果我没记错的话,这也取决于服务器上的PCRE库启用了Unicode处理。但是它应该存在于大多数现代服务器上。 - Pekka
@Pekka:啊,不错,立即升级!它确实是一个共享库。(可能取决于构建参数。PHP 5.3.3仍捆绑了一个过时的libpcre版本7.8,来自2008年。) - mario
这个回答太棒了。致敬。 - Jamie Hollern
尝试使用此字符串,但未捕获它:人中之龍,Yakuza 3,SEGA,PS4,重製版,《人中之龍3》PS4重製版釋出全新預告及遊戲截圖,影音相關,Game LIFE 遊戲情報。根据在线词典,其中至少有一些字符似乎是中文。 - alimack

3

@mario 的答案是正确的!

使用此正则表达式匹配中文字符:/[\x{4e00}-\x{9fa5}]+/u

别忘了加上 u 修饰符!!!

关于 u 修饰符,可以参考这里

感谢 mario


2
preg_match("/^\p{Han}{2,10}+$/u", $str);

请使用正则表达式/^\p{Han}{2,10}+$/u,该表达式只允许中文字符。
  • 它仅允许中文字符 &
  • 最少允许2个字符 &
  • 最多允许10个字符

您可以通过更改{2,10}来调整所需的最小和最大字符数。

\p/u非常重要,请务必添加。


1

这个链接到之前的一个关于识别简体或繁体中文的问题,可能会给你一些想法... 你并没有明确指出你需要哪种类型的中文,而我也不够了解中文去辨认它们之间的差异。


嘿,这是一个很棒的想法,比Unicode正则表达式少了很多依赖。+1 - Pekka
@Pekka - 我必须承认,我很惊讶它实际上起作用了(即使它确实需要bobince的一些帮助来处理实际字符集)......只是那些理论之一,我从未有机会在实践中尝试。 - Mark Baker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接