我想知道如何将下面的字符串格式化为大写的单词首字母,但是已经是大写字母的单词。
实施例
ABcd Efg = Abcd Efg
abcd EFG = Abcd EFG
有人可以举例说明是否可能。
由于
答案 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";
}