我有一个搜索框,我希望我的结果只在字母(姓名或姓氏)的字母上加粗。
例如:“Mary Kidman”。
搜索:“Ma”
预期结果:“ Ma ry Kidman”
目前的结果:“ Ma ry Kid ma n”
我的剧本:
function replace_accents($str) {
$str = htmlentities($str, ENT_COMPAT, "UTF-8");
$str = preg_replace('/&([a-zA-Z])(uml|acute|grave|circ|tilde);/','$1',$str);
return html_entity_decode($str);
}
$q = $_POST['search'];
while($row = $result->fetch_array()) {
$id_docente = $row['id'];
$name = $row['name'];
$searchable_name = replace_accents($name);
if(stripos($searchable_name, $q) !== false) {
$final_result = preg_replace("/($q)/i", '<strong>$1</strong>', $searchable_name);
}
谢谢!
答案 0 :(得分:1)
添加分词标记\b
,如下所示:
$final_result = preg_replace("/\b($q)/i", '<strong>$1</strong>', $searchable_name);
这样,它只匹配一个单词的开头,比如 Ma ry,而不是基德曼。
Demo:
Mary Kidman -> <strong>Ma</strong>ry Kidman
James Marconi -> James <strong>Ma</strong>rconi
Yo Yo Ma -> Yo Yo <strong>Ma</strong>
Ben Stillman -> Ben Stillman
Mark Manning -> <strong>Ma</strong>rk <strong>Ma</strong>nning
答案 1 :(得分:0)
您需要使用捕获组:
例如:
/ma/gi
匹配 Ma ry Kid ma n
其中:
/(?:^| )(ma)/gi
匹配 Ma ry Kidman
第一个paranthesis是一个非捕获组,它匹配字符串的开头或空格。第二个paranthesis是一个匹配字符串 ma 的捕获组。
答案 2 :(得分:-1)
preg_replace的参数在主题
之后有一个限制器$final_result = preg_replace("/($q)/i", '<strong>$1</strong>', $searchable_name, 1);