0

私は初心者で、これは私にとって難しいものです。

変数内にテキストがあります:

$bio = 'text, text, tex ...';

ucfirst php 関数を使用して、テキスト内の単語を大文字で始めることができます。

問題は、1 文字、2 文字、または 3 文字の単語を大文字にしたくないということです。プロらしく見えないからです。

重要:しかし、適切な英語の文法であるため、文字 "I"も大文字のままにしたいと思います。

したがって、次のようなテキスト: これは ucfirst 関数のないテキストであり、大文字にする必要があると思います

次のようになります: これは ucfirst 関数のないテキストで、大文字にする必要があると思います

何か案は?

4

3 に答える 3

3

これにより、4 文字以上の長さの単語 (一連の英字) が大文字になります。

$bio = preg_replace_callback('/[a-z]{4,}|\bi\b/i', function($match){
    return ucfirst($match[0]);
}, $bio);

5.3 より前の PHP バージョンの場合:

$bio = preg_replace_callback('/[a-z]{4,}|\bi\b/i',
  create_function('$match', 'return ucfirst($match[0]);'), $bio);

Iand add、capitalizeなどの短い単語はそのまま残しますi

于 2012-06-07T00:18:59.283 に答える
0

私は正規表現を使用します。したくない場合は、分割を使用してからトークンを反復処理し、一連の if-else を使用できますが、正規表現の方がクールです。;)

ここに非常によく似た質問があります:正規表現はすべての単語の最初の文字を大文字にし、ダッシュのような特殊文字の後も

于 2012-06-07T00:18:50.983 に答える
0

うーんそうですか?

$bio_x = explode(" ",$bio); if(strlen($bio_x[0]) > 3) $bio = ucfirst($bio); $bio = str_replace(" i "," I ",$bio);
于 2012-06-07T00:22:08.730 に答える