#php
#php
Вопрос:
У меня есть предложения для заголовка breadcrumb, например Code01 - HISTORY LESSON II - Class A
. Мне нужно, чтобы эти предложения HISTORY LESSON II
стали History Lesson II
. Я попытался strtolower
сначала использовать функцию, а затем ucwords
, как показано ниже
$data = ucwords(strtolower($lesson_name));
и предложения становятся History Lesson Ii
. Знаете ли вы, как проверить, есть ли в предложениях римские цифры, и если есть, то только в римских цифрах, не измененных на strtolower ?
Спасибо
Ответ №1:
Если вы запустите код так, как он у вас есть… Вы можете использовать then preg_replace_callback
для сопоставления римских цифр и возврата их в верхнем регистре.
Код
$string = "Code01 - HISTORY LESSON II - Class A"; // Subject string
$string = ucwords(strtolower($string)); // Set sentence to Title Case
echo preg_replace_callback(
"/(b[ivx] )b/i", // Pattern to match Roman Numberals; case insensitive
function($matches){return strtoupper($matches[1]);}, // Function to return numerals in uppercase
$string // Subject to run pattern against
);
Ответ №2:
Вы также можете использовать preg_match_all и array_map .
$string = "Code01 - HISTORY LESSON II - Class A";
$string = ucwords(strtolower($string));
$pattern = '/b(?:X?L?(?:X{0,3}(?:IX|IV|V|V?I{1,3})|IX|X{1,3})|XL|L)b/i';
preg_match_all($pattern,$string,$matches);
$upper = array_map('strtoupper',$matches[0]);
echo str_replace($matches[0],$upper,$string);
Вывод с:
Code01 - History Lesson II - Class A