Php - 正则表达式检查字符串是否有中文字符
回答 4
浏览 2.6万
2011-02-07
我有字符串$str
,我想检查它的内容是否有中文字符(真/假)
$str = "赕就可消垻,只有当所有方块都被消垻时才可以过关";
能否请您帮助我?
谢谢你!阿德里安
这是用什么字符集?是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);
这只是检查是否存在至少一个中文字符。如果你想匹配完整的字符串,你可能想在此基础上扩展。
很好的回答。我不知道你可以通过regex来识别unicode!
- Peter 2011-02-07
@Peter:这有点新。取决于版本,但从PHP4开始应该会捆绑一个兼容Unicode的
PCRE_VERSION
。
- mario 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
#3楼
得票数 2
preg_match("/^\p{Han}{2,10}+$/u", $str);
使用/^p{Han}{2,10}+$/u只允许使用中文字符的重合搜索。
- 它只允许使用中文字符&。
- 它允许最少2个字符&。
- 它最多允许10个字符
你可以根据你的需要,通过改变{2,10}来改变最小和最大的字符。
@p& /u是非常重要的添加,请不要避免添加。
#4楼
得票数 1
这个链接到一个关于识别简体中文或繁体中文的问题,可能会给你一些想法......你实际上没有说明你指的是哪一种,而我对中文的了解也不足以辨别其中的区别。
嘿,这是个好主意,而且比Unicode Regex的依赖性更小。+1
- Pekka 2011-02-07
@Pekka - 我必须承认,我很惊讶它真的起作用了(即使它确实需要bobince在实际字符集方面提供一点帮助)....,这只是我从未有机会在实践中尝试的那些理论中的一个。
- Mark Baker 2011-02-07