Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

preg_replace to capitalize a letter after a quote

Tags:

I have names like this:

$str = 'JAMES "JIMMY" SMITH'

I run strtolower, then ucwords, which returns this:

$proper_str = 'James "jimmy" Smith'

I'd like to capitalize the second letter of words in which the first letter is a double quote. Here's the regexp. It appears strtoupper is not working - the regexp simply returns the unchanged original expression.

$proper_str = preg_replace('/"([a-z])/',strtoupper('$1'),$proper_str);

Any clues? Thanks!!

like image 229
Summer Avatar asked Apr 14 '10 14:04

Summer


1 Answers

Probably the best way to do this is using preg_replace_callback():

$str = 'JAMES "JIMMY" SMITH';
echo preg_replace_callback('!\b[a-z]!', 'upper', strtolower($str));

function upper($matches) {
  return strtoupper($matches[0]);
}

You can use the e (eval) flag on preg_replace() but I generally advise against it. Particularly when dealing with external input, it's potentially extremely dangerous.

like image 157
cletus Avatar answered Sep 23 '22 00:09

cletus