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

时间:2016-02-26 19:58:44

标签: regex preg-replace preg-match preg-replace-callback

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

预期结果:Sabiña/ Cerca

实际结果:SabiÑ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);

1 个答案:

答案 0 :(得分:2)

您只需使用/u修饰符。

'/\w+/u'

请参阅IDEONE demo

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

请参阅Pattern modifiers

  

此修饰符打开与Perl不兼容的PCRE的其他功能。模式和主题字符串被视为UTF-8。此修饰符可从Unix上的PHP 4.1.0或更高版本以及win32上的PHP 4.2.3获得。