2011-06-02 41 views
1

我想知道如何將字符串格式化爲大寫的第一個字母的單詞,但ingore單詞已經是大寫的。ucwords但忽略單詞什麼是在塊首都?

例子

ABcd Efg = Abcd Efg 
abcd EFG = Abcd EFG 

可能有人請舉個例子,如果它是可能的。

感謝

回答

0

您需要分別評估每一個字:

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

這意味着分裂的空間,並分別評估每個部分的任何字符串。


UPDATE:

這裏有一個工作示例:

// 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"; 
} 
1

使用正則表達式來過濾由allupercaseiness的話將是一種選擇:

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

剛開始使用$words = ucwords($words)應該爲你工作。

+0

這是行不通的,因爲'bAr'變得'BAr'。 – Matthew 2011-06-02 02:52:09

+1

錯,它不會從'ABcd'製作'Abcd'。 – piotrm 2011-06-02 02:52:41

+0

@piotrm,謝謝。你是對的。 – Tapos 2011-06-02 02:56:40

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