2011-06-02 42 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