PHP - использовать заглавные буквы после точки или после точки и пробела - PullRequest
0 голосов
/ 10 ноября 2018

Я хотел бы использовать первую букву после точки или после точки и пробела.

$string="I am a string with several periods.period #1. period #2.";

Это должна быть последняя строка:

I am a string with several periods.Period #1. Period #2.

У меня уже естьискал решение для stackoverflow, но решение, которое я нашел, было только для того, чтобы использовать заглавную букву только после точки, а не для точки и пробела.

Ответы [ 4 ]

0 голосов
/ 10 ноября 2018

Я создал эту простую функцию, и она работает как шарм

, и вы можете добавлять разделители по своему усмотрению.

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."

результат

0 голосов
/ 10 ноября 2018

Если регулярное выражение не является опцией, может сработать что-то вроде этого:

$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);

Хотя, это имеет дополнительный эффект удаления пробелов.

https://3v4l.org/fWGUW

0 голосов
/ 10 ноября 2018

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.
0 голосов
/ 10 ноября 2018

Используйте регулярное выражение, чтобы найти точку \., необязательный пробел \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.

https://3v4l.org/LevU5

Чтобы сделать его немного более оптимизированным, вы можете добавить array_unique перед циклом, так как str_replace заменяет все равные подстроки.

$matches[0] = array_unique($matches[0]);

https://3v4l.org/mIiX8

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...