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:
Фг нист н н