PHPでは、 UCWords関数は、文字列内の各単語の最初の文字を大文字に変換するために使用される一般的な方法です。そのデフォルトの動作は、スペースごとに単語を分離することですが、 UCWordsは、文字列に句読点または他の非アルファベット文字が含まれている場合、理想的なケース効果を達成できない場合があります。この記事では、他の手法と組み合わせてUCWordsを使用して、スペースと句読点を含む長い文字列を処理して、より正確なケース変換を実現する方法について説明します。
UCWordsは、スペースで区切られた単語の最初の文字のみを大文字にします。例えば:
<?php
$str = "hello world! this is php.";
echo ucwords($str);
?>
出力:
Hello World! This Is Php.
ご覧のとおり、句読点に続く文字も正しく処理されますが、Stringにハイフンやアポストロフィなどの他の句読点が含まれている場合、 UCWordsは自動的に処理しません。
PHP 5.4から、 UCWords関数は2番目のパラメーターをサポートして、Word Separatorsとして使用される文字を定義します。例えば:
<?php
$str = "jack-o'-lantern's day";
echo ucwords($str, " -'");
?>
出力:
Jack-O'-Lantern'S Day
ここでは、スペース、ハイフン、アポストロフィがデリミターとして指定されているため、各デリミッターの後の最初の文字も大文字に変換されます。
文字列構造が複雑で、 ucwordsのみに依存している場合、各単語の最初の文字を正規表現と組み合わせて変換できます。
<?php
$str = "this is a complex-string, isn't it? yes!";
$callback = function ($matches) {
return strtoupper($matches[1]) . strtolower(substr($matches[0], 1));
};
$result = preg_replace_callback('/\b\w/u', $callback, $str);
echo $result;
?>
出力:
This Is A Complex-String, Isn't It? Yes!
このコードは、 preg_replace_callbackを使用して、大文字の変換用の各単語の最初の文字を見つけ、残りの文字を保証します。
<?php
$str = "welcome to the m66.net-php tutorial, let's learn ucwords!";
echo ucwords($str, " -'");
?>
出力: