PHP将所有全大写单词改为小写

时间:2014-01-18 13:34:26

标签: php string

我想做这样的事情:

$string = "Lorem ipsum DOLOR Sit amet";
...some magic here... -> $finalString
$finalString = "Lorem ipsum dolor Sit amet"

基本上我不想将所有完全大写的单词转换为完整的小写单词。

4 个答案:

答案 0 :(得分:6)

这是我最初的建议:

$finalString = preg_replace("/\\b[A-Z]+\\b/e", "strtolower(\"\\0\");", $string);

但是,从PHP 5.5.0开始,preg_replace中的e修饰符已被弃用。所以正确的选择是preg_replace_callback

$string = "Lorem ipsum DOLOR Sit amet";
$finalString = preg_replace_callback(
    "/\\b[A-Z]+\\b/",
    function($matches){
    return strtolower($matches[0]);
    },
    $string
);

答案 1 :(得分:2)

sans regex解决方案......

<?php
$string = "Lorem ipsum DOLOR Sit amet";
$str_arr = explode(' ',$string);
foreach($str_arr as &$val)
{
if($val==strtoupper($val))
{
$val=strtolower($val);
}
}
echo $str= implode(' ',$str_arr); //"prints" Lorem ipsum dolor Sit amet

答案 2 :(得分:2)

preg_replace_callback就是您所需要的。

$string = "Lorem ipsum DOLOR Sit amet";

$finalString = preg_replace_callback('/\b([A-Z]+)\b/', function($m) {
        return strtolower($m[1]);
}, $string);

echo $finalString;

$m[1]匹配与大写单词匹配的第一个捕获组([A-Z]+)\b代表字边界。

答案 3 :(得分:1)

使用preg_replace_callback()与表达式/\b[A-Z]+\b/\b - 单词的开头或结尾,[A-Z]+ - 所有字符都是大写的,并且至少有一个字符):

<?php
header('Content-Type: text/plain; charset=utf-8');

$string = 'Lorem ipsum DOLOR Sit amet';

$result = preg_replace_callback(
    '/\b[A-Z]+\b/',
    function($matches){
        return strtolower($matches[0]);
    },
    $string
);

echo $result;
?>

节目:

Lorem ipsum dolor Sit amet

P.S。: 您还可以将正则表达式更新为仅小写单词,其中至少包含2个字符:

/\b[A-Z]{2,}\b/