ucwords但忽略BLOCK大写字母?

时间:2011-06-02 02:32:51

标签: php string

我想知道如何将下面的字符串格式化为大写的单词首字母,但是已经是大写字母的单词。

实施例

ABcd Efg = Abcd Efg
abcd EFG = Abcd EFG

有人可以举例说明是否可能。

由于

4 个答案:

答案 0 :(得分:1)

使用正则表达式通过allupercaseiness过滤单词将是一个选项:

$text = preg_replace('/\b(?![A-Z]+\b)\w+\b/e', 'ucwords("$0")', $text);

答案 1 :(得分:1)

只需使用$words = ucwords($words)即可。

答案 2 :(得分:1)

$string = "abcd DefGH IJK";
$arr = explode( " ", $string );
foreach( $arr as &$word )
  if( $word != strtoupper($word ) )
    $word = ucfirst( strtolower( $word ) );
$string = implode( " ", $arr );
echo $string;

结果:Abcd Defgh IJK

答案 3 :(得分:0)

您需要分别评估每个单词:

if( strtoupper($word) != $word ){
    $word = ucwords($word);
}

这意味着在空格上分割任何字符串并分别评估每个部分。


<强>更新

这是一个有效的例子:

// put these into an array to demo the logic
$s1="ABcd Efg";
$s2="abcd EFG";
$words_array = array($s1,$s2);

foreach( $words_array as $words ){
    echo "Old words: $words\n";

    // inline replace of words
    $split_words = explode(" ",$words);
    for( $i=0; $i<count($split_words); $i++ ){
        $word = $split_words[$i];
        if( strtoupper($word) != $word ){
            $split_words[$i] = ucwords(strtolower($word));
        }
    }
    echo "New words: ".implode(" ",$split_words)."\n";
}