我想知道如何將字符串格式化爲大寫的第一個字母的單詞,但ingore單詞已經是大寫的。ucwords但忽略單詞什麼是在塊首都?
例子
ABcd Efg = Abcd Efg
abcd EFG = Abcd EFG
可能有人請舉個例子,如果它是可能的。
感謝
我想知道如何將字符串格式化爲大寫的第一個字母的單詞,但ingore單詞已經是大寫的。ucwords但忽略單詞什麼是在塊首都?
例子
ABcd Efg = Abcd Efg
abcd EFG = Abcd EFG
可能有人請舉個例子,如果它是可能的。
感謝
您需要分別評估每一個字:
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";
}
使用正則表達式來過濾由allupercaseiness的話將是一種選擇:
$text = preg_replace('/\b(?![A-Z]+\b)\w+\b/e', 'ucwords("$0")', $text);
剛開始使用$words = ucwords($words)
應該爲你工作。
$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
這是行不通的,因爲'bAr'變得'BAr'。 – Matthew 2011-06-02 02:52:09
錯,它不會從'ABcd'製作'Abcd'。 – piotrm 2011-06-02 02:52:41
@piotrm,謝謝。你是對的。 – Tapos 2011-06-02 02:56:40