我想知道如何将字符串格式化为大写的第一个字母的单词,但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