我有一个搜索框,我希望我的结果只在单词开头的字母(姓名或姓氏)上加粗。
例如:"玛丽基德曼"。
搜索:"妈"
预期成果:"马里基德曼"
当前结果:"Mary Kidman"
我的脚本:
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);
}
谢谢!
添加分词标记 'b
,如下所示:
$final_result = preg_replace("/'b($q)/i", '<strong>$1</strong>', $searchable_name);
这样,它只在单词的开头匹配,比如马瑞,而不是基德曼。
演示:
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
需要使用捕获组:
例如:
/ma/gi
饰演 马瑞小子
其中:
/(?:^| )(ma)/gi
饰演马里基德曼
第一个偏执是一个非捕获组,它匹配字符串的开头或空格。第二个偏执是与字符串 ma 匹配的捕获组。
preg_replace 的参数在主题之后有一个限制器
$final_result = preg_replace("/($q)/i", '<strong>$1</strong>', $searchable_name, 1);