【发布时间】:2011-08-10 15:11:11
【问题描述】:
我正在使用以下代码来检查所有字符都是大写字母的字符串:
if (preg_match('/^[\p{Lu}]+$/', $word)) {
这适用于英语,但无法检测带有重音符号、俄语字母等的字母。\p{Lu} 是否应该适用于所有语言?有更好的方法吗?
【问题讨论】:
-
我一直认为
\p{Lu}应该适用于所有支持 Unicode 的字母。是否完全无法将任何西里尔字母识别为大写? -
好吧,它在 Perl 中运行良好,因为如果数据是字符数据而不是字节数据,或者如果它在模式中看到 Unicode 属性,Perl 会自动打开
/u。可悲的是,PHP 默认情况下并未在 Unicode 中使用 PCRE。有没有办法像在 Perl 中一样打开/ueverywhere ?顺便说一句,如果 Unicode 不区分大小写匹配,您可能仍然需要注意范围内的 Unicode,因为 we just recently fixed a bug 与此相关。我自己还没有使用 PCRE 进行等效测试。