Я хотел бы использовать первую букву после точки или после точки и пробела.
$string="I am a string with several periods.period #1. period #2.";
Это должна быть последняя строка:
I am a string with several periods.Period #1. Period #2.
Я уже искал решение для stackoverflow, но решение, которое я нашел, было только для заглавной буквы начальной буквы после только точки, а не для точки и пробела.
Используйте регулярное выражение, чтобы соответствовать точке \.
, необязательный пробел \s*
и письмо \w
,
Затем зациклите массив совпадений и выполните str_replace.
$str="I am a string with several periods.period #1. period #2.";
preg_match_all("/\.\s*\w/", $str, $matches);
foreach($matches[0] as $match){
$str = str_replace($match, strtoupper($match), $str);
}
echo $str;
//I am a string with several periods.Period #1. Period #2.
Чтобы сделать его немного более оптимизированным, вы можете добавить array_unique перед циклом, так как str_replace заменяет все равные подстроки.
$matches[0] = array_unique($matches[0]);
preg_replace_callback твой друг:
$string="I am a string with several periods.period #1. period #2.";
$string = preg_replace_callback('/\.\s*\K\w/',
function($m) {
return strtoupper($m[0]);
},
$string);
echo $string;
Выход:
I am a string with several periods.Period #1. Period #2.
Если регулярное выражение не вариант, может работать что-то вроде этого:
$str = "I am a string with several periods.period #1. period #2.";
$strings = explode('.', $str);
$titleCased = [];
foreach($strings as $s){
$titleCased[] = ucfirst(trim($s));
}
echo join(".", $titleCased);
Хотя, это имеет дополнительный эффект удаления пробелов.
Я создал эту простую функцию, и она работает как шарм
и вы можете добавлять разделители, как вам нравится.
function capitalize_after_delimiters($string='', $delimiters = array())
{
foreach ($delimiters as $delimiter)
{
$temp = explode($delimiter, $string);
array_walk($temp, function (&$value) { $value = ucfirst($value); });
$string = implode($temp, $delimiter);
}
return $string;
}
$string ="I am a string with several periods.period #1. period #2.";
$result = capitalize_after_delimiters($string, array('.', '. '));
var_dump($result);
result: string(56) "I am a string with several periods.Period #1. Period #2."