Задать вопрос
Protossan
@Protossan
студент

Как изменить регистр определенных целых слов?

Подскажите пожалуйста. Имеется заголовок например
maximum best program for you - this is a 3d max - super  puper program

Необходимо сделать

maximum best program for you - this is a 3D MAX - super puper PROGRAM


Т.е. слова "3D", "MAX", "PROGRAM" и прочие из нужного списка должны быть всегда большими, независимо от того, в каком они регистре были до этого. Эти слова я загнал в массив
$noUp=array("3D","4K","MAX","PROGRAM");
и сделал масив этих слов в нижнем
$inUp=array("3D","4K","MAX","PROGRAM");

Потом перевожу всю строку в нижний регистр
$titleNew=strtolower($TheTitle);

и пробую сделать нужные слова большими
for($i=0;$i<count($isUp);$i++)
	{
$titleNew=preg_replace("/\b".$isUp[$i]."\b/iu",$noUp,$titleNew);
	}


Но ничего не меняется. Может есть решение попроще и эффективнее?
  • Вопрос задан
  • 131 просмотр
Подписаться 2 Средний 4 комментария
Решения вопроса 2
Drilled-prog
@Drilled-prog
Программирую на ['php', 'js']
Регулярные выражения для этого отлично подходят.

$replaces = [
	'#3d#' => '3D',
	'#\bmax\b#' => 'MAX', //меняем только вхождения в целых словах, слово max заменится на MAX, в слове maximum max не поднимется.
	'#program#is' => 'PROGRAM' //меняем любые вхождения: program, Program, PROgram и тд... получим PROGRAM, так же например слово programfiles заменится на PROGRAMfiles, если надо целиком вхождение в слово обернуть в \bслово\b как в примере с max
];
	
function replacer($params, $string) {
	$from = array_keys($params);
	$to = array_values($params);
	return preg_replace($from, $to, $string);
}

$TheTitle = 'maximum best program for you - this is a 3d max - super  puper pRoGrAm';

$titleNew = replacer($replaces, $TheTitle);

var_dump($titleNew); //string(70) "maximum best PROGRAM for you - this is a 3D MAX - super  puper PROGRAM"


live example: https://3v4l.org/KlGKZ
Ответ написан
Комментировать
dollar
@dollar
Делай добро и бросай его в воду.
$noUp[$i]
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
samodum
@samodum
Какой вопрос - такой и ответ
Регулярки для этого не предназначены, они для других целей.
Для данной задачи используй словарь ("3d", "max", "program"), к которому будешь применять автозамену с апперкейсом.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы