regex — верхний регистр первого символа и игнорирование нескольких специальных символов в переполнении стека

Я пытаюсь отобразить верхний регистр текста только первым символом в фразе. Если есть какие-либо специальные символы, их следует игнорировать.

например:

РАЗДЕЛ 1: ИДЕНТИФИКАЦИЯ ВЕЩЕСТВА / ПОДГОТОВКА И
КОМПАНИЯ / ПРЕДПРИНИМАТЕЛЯ

выше мой текст, и я хочу, чтобы вышеуказанный текст отображался как

Раздел 1: Идентификация вещества / препарата и
компания / предприятие

на данный момент я пытался echo ucfirst (strtolower ($ word));

какие выводы

Раздел 1: идентификация вещества / препарата и
компания / предприятие

Как мне этого добиться?
Спасибо

1

Решение

Вы можете split с помощью : окружен необязательным интервалом и вызовом ucfirst на каждый разделенный элемент, а затем соедините их вместе:

$out="";

foreach (preg_split('/(\h*[:.]\h*)/', strtolower($str), 0, PREG_SPLIT_DELIM_CAPTURE) as $s)
$out .= ucfirst($s)

echo "$out\n";

//=> Section 1: Identification of the substance/preparation and of the company/undertaking

\h*[:.]\h* распадается на : или же . с дополнительным интервалом с каждой стороны. Вы можете добавить больше символов здесь в класс символов, на которые вы хотите разделить.

1

Другие решения

Вы можете разделить на две части:

$exploded = explode(': ', $phrase);

затем сначала каждую часть:

$exploded[0] = ucfirst($exploded[0]);
$exploded[1] = ucfirst(strtolower($exploded[1]));

наконец вы можете присоединиться ко всем:

echo join(': ', $exploded);

$phrase = 'SECTION 1: CIAO MONDO';
$exploded = explode(': ', $phrase);
$exploded[0] = ucfirst($exploded[0]);
$exploded[1] = ucfirst(strtolower($exploded[1]));
echo join(': ', $exploded); // Section 1: Ciao mondo
0

По вопросам рекламы [email protected]