PHP preg_replace() верхний и нижний регистр разницы

У меня есть функция поиска PHP/Ajax, которая возвращает все страны, которые содержат символы, введенные в текстовое поле. Все эти страны перечислены, и указанные символы выделены жирным шрифтом внутри страны, название которой в списке.

Пример символов, указанных в текстовом поле: "Af", которые возвращают Афганистан и Южную Африку - без пробела между курсом

Теперь все названия стран в базе данных курса начинаются с заглавной буквы. Но

preg_replace()

не могу найти разницу между прописными и строчными буквами. Поэтому, когда я введу "a" в текстовое поле, он вернет Afgh nist n n заметку , что первая заглавная буква "A" не выделена жирным шрифтом

Вот код, который я использую

$display_name = preg_replace("/" . $search_string . "/", "<b>" . $search_string . "</b>", $result['Country_Name']);
$display_url = '';

$output = str_replace('NameReplace', $display_name, $HTML);
$output = str_replace('UrlReplace', $display_url, $output);
echo($output);

Я могу "исправить" эту проблему, добавив модификатор "/i" в preg_replace(). Согласно PHP.net, он будет делать следующее:

i (PCRE_CASELESS) Если этот модификатор установлен, буквы в шаблоне совпадают как с заглавными, так и с заглавными буквами.

Это превратит полужирные символы внутри названия стран в нижний или верхний регистр в соответствии с символами внутри текстового поля.

Пример: символы, указанные в текстовом поле: "A" вернет " A fgh A nist A n", а "a" снова вернет "fgh a nist a n", пожалуйста, игнорируйте пробел.

Как я могу сделать так, чтобы при вводе: "а" он возвращал " А фг нист а н"?

Спасибо

2 ответа

Решение

Изменить это:

$display_name = preg_replace("/" . $search_string . "/", "<b>" . $search_string . "</b>", $result['Country_Name']);

к этому:

$display_name = preg_replace("/(" . $search_string . ")/i", '<b>$1</b>', $result['Country_Name']);

Попробуй это:

echo preg_replace("/a/i", "<b>\1</b>", "Afghanistan");

Выходы в HTML:

Фг нист н н

Другие вопросы по тегам