3

PHP を使用して、スラッシュに続く単語を含め、各単語を大文字にすることでいくつかのタイトルをクリーンアップしたいと考えています。ただし、「and」、「of」、および「the」という単語を大文字にしたくありません。

2 つの文字列の例を次に示します。

会計技術/技術者および簿記

脊椎の整形外科

次のように修正する必要があります。

会計技術/技術者および簿記

脊椎の整形外科


これが私が現在持っているものです。内破と preg_replace_callback を組み合わせる方法がわかりません。

// Will capitalize all words, including those following a slash
$major = implode('/', array_map('ucwords',explode('/',$major)));

// Is supposed to selectively capitalize words in the string
$major = preg_replace_callback("/[a-zA-Z]+/",'ucfirst_some',$major);

function ucfirst_some($match) {
   $exclude = array('and','of','the');
   if ( in_array(strtolower($match[0]),$exclude) ) return $match[0];
   return ucfirst($match[0]);
}

現在、文字列内のすべての単語を大文字にしています。これには、私がしたくない単語も含まれます。

4

2 に答える 2

8

への再帰呼び出しを試みるつもりでしたucfirst_some()が、コードは最初の行がなくても問題なく動作するようです。すなわち:

<?php
$major = 'accounting technology/technician and bookkeeping';
$major = preg_replace_callback("/[a-zA-Z]+/",'ucfirst_some',$major);
echo ucfirst($major);

function ucfirst_some($match) {
   $exclude = array('and','of','the');
   if ( in_array(strtolower($match[0]),$exclude) ) return $match[0];
   return ucfirst($match[0]);
}

目的の を印刷しますAccounting Technology/Technician and Bookkeeping

あなたの正規表現はすでに文字列と一致しているため、スラッシュについてまったく心配する必要はないようです。単語の途中にある数字や記号 (ハイフンなど) も大文字になることに注意してください。

$excludeまた、あなたのアレイが十分に完成していないことについて人々があなたに文句を言うのは無視してください。または、リストについてはGoogleだけです。

この方法で何を大文字にするべきか/すべきでないかを決定するための、合意された単一の「正しい」方法はないことに注意してください。

于 2012-12-31T16:22:16.877 に答える
1

また、文頭に an や the などの単語が使用されている場合は、それらがすべて大文字であることを確認する必要があります。

注: このような of や and で始まる用語は思い浮かびませんが、奇妙なデータがプログラムに忍び込む前に、そのようなものを修正する方が簡単です。

http://codesnippets.joyent.com/posts/show/716で以前に使用したコード スニペットがあり ます。

コメントセクションの ucwords の php.net 関数ページで参照されています http://php.net/manual/en/function.ucwords.php#84920

于 2012-12-31T16:22:47.340 に答える