如何将正则表达式搜索中的外来字符转换为正确的大小写?

How to convert foreign characters in regex search to proper case?

我写了下面的函数。它将小写字母转换为大写字母和正确的大小写。我希望它忽略外来字符。例如。 ñ

预期结果:Sabiña/Cerca

实际结果:萨比纳A/Cerca

注意: 如果我单独使用 mb_convert_case 它不会将任何字符更改为正确的大小写。

$string= 'SABIÑA CERCA';

echo  preg_replace_callback('/\w+/i', 

create_function('$m','

var_dump($m);
if(strlen($m[0]) > 3)
{
    return mb_convert_case($m[0], MB_CASE_TITLE, "UTF-8");
}
else
{
    return ucfirst($m[0]);
}')
, $string);

您只需要使用 /u 修饰符。

'/\w+/u'

IDEONE demo

请注意 /i 不区分大小写的修饰符是多余的,因为 \w 匹配大小写字母 .

参见Pattern modifiers

This modifier turns on additional functionality of PCRE that is incompatible with Perl. Pattern and subject strings are treated as UTF-8. This modifier is available from PHP 4.1.0 or greater on Unix and from PHP 4.2.3 on win32.