我有一个用ajax和php制作的实时搜索脚本。它用于使用以下regex搜索英文字符:
$search_string = preg_replace("/[^A-Za-z0-9]/", " ", $_POST['query']);
如果搜索匹配,则突出显示单词。
我想用土耳其字符搜索,所以我改变正则表达式代码如下:
$search_string = preg_replace("/[^A-Za-z0-9ğıüşöçİĞÜŞÖÇ]/", " ", $_POST['query']);
它完美地搜索,但在更改此代码后,如果找到土耳其语代码,它不突出显示,但英语代码突出显示。
这是高亮代码:
// Format Output Strings And Hightlight Matches
$display_name = preg_replace("/".$search_string."/i", "<b class='highlight'>".$search_string."</b>", $result['musteri_adi']);
$display_function = preg_replace("/".$search_string."/i", "<b class='highlight'>".$search_string."</b>",$result['musteri_telefon']) ;
$display_url = urlencode($result['musteri_id']);
$display_mail = preg_replace("/".$search_string."/i", "<b class='highlight'>".$search_string."</b>", $result['musteri_mail']);
$display_tcno = preg_replace("/".$search_string."/i", "<b class='highlight'>".$search_string."</b>", $result['musteri_tcno']);
我想我应该改变突出显示的代码,但我不知道怎么做
这里有两点需要考虑:
-
正则表达式应该用
/u
修饰符声明,以启用完整的Unicode支持 -
您执行的替换用空格替换不需要的字符,而您可以使用
$search_string = preg_replace("/[^A-Za-z0-9ğıüşöçİĞÜŞÖÇ]/u", "", $keyword);
完全删除它们
查看这个IDEONE演示:
$keyword = 'Çınar ';
$search_string = preg_replace("/[^A-Za-z0-9ğıüşöçİĞÜŞÖÇ]/u", "", $keyword);
echo $search_string . PHP_EOL;
$musteri_adi = "Çınar, more and more words.";
$display_name = preg_replace("/".$search_string."/i", "<b class='highlight'>".$search_string."</b>", $musteri_adi);
echo $display_name . PHP_EOL;