Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Make all words lowercase and the first letter of each word uppercase

I have a string with improper capitalization scattered like below:

$str = "tHis iS a StRinG thAt NeEds ProPer CapiTilization";
$newStr = ucfirst($str);
echo $newStr;

How would I be able to capitalize the first letter of each word and lower case the incorrectly capitalized letters? I need the string to be fully title case.

I know I can change to lower and then use ucwords() but is there a shorter way to do this?

like image 777
HelloWorld Avatar asked Sep 14 '15 12:09

HelloWorld


2 Answers

How would I be able to capitalize the first letter of each word and lower case the incorrectly capitalized letters?

ucwords() will capitilize the first letter of each word. You can combine it with strtolower() to first lowercase everything.

For example:

ucwords(strtolower('HELLO WORLD!')); // Hello World!
like image 136
Jason McCreary Avatar answered Sep 29 '22 07:09

Jason McCreary


There is an earlier question where I have already suggested mb_convert_case(), but the sample text in that question is rather lackluster.

There is a single, native function that performs title-casing on multiple words in a string and it is multibyte-safe. This is an excellent solution because you don't need to prepare the string to be all lowercase before making the leading letter of all words uppercase.

Code: (Demo)

$string = "tHis iS a StRinG thAt NeEds ProPer CapiTilization";
echo mb_convert_case($string, MB_CASE_TITLE, 'UTF-8');

Output:

This Is A String That Needs Proper Capitilization

Laravel also offers a helper method that can be used: title().

use Illuminate\Support\Str;

$converted = Str::of('a nice title uses the correct case')->title();

// A Nice Title Uses The Correct Case

Source: https://laravel.com/docs/8.x/helpers#method-fluent-str-title

like image 43
mickmackusa Avatar answered Sep 29 '22 06:09

mickmackusa