ucwords, но игнорировать слова, что в БЛОКАХ столиц? - PullRequest
1 голос
/ 02 июня 2011

Мне было интересно, как отформатировать строки, указанные ниже, в верхнем регистре первой буквы слов, но вводить слова, которые уже в верхнем регистре.

Примеры

ABcd Efg = Abcd Efg
abcd EFG = Abcd EFG

Может ли кто-нибудь привести пример, если это возможно?

Спасибо

Ответы [ 4 ]

1 голос
/ 02 июня 2011
$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

1 голос
/ 02 июня 2011

Можно использовать регулярное выражение для фильтрации слов по буквам в верхнем регистре:

$text = preg_replace('/\b(?![A-Z]+\b)\w+\b/e', 'ucwords("$0")', $text);
1 голос
/ 02 июня 2011

Просто использование $words = ucwords($words) должно работать для вас.

0 голосов
/ 02 июня 2011

Вам необходимо оценить каждое слово отдельно:

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";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...