我创建了preg_replace:
$searchTerm = preg_replace('/[^\p{L}\p{N}\s]/u', '', $searchTerm);
但是当我在搜索框中搜索时
!@#$%^&*()_+
它不起作用。
我被期待当任何人搜索这个“!@#$%^& *()_ +”然后输出“未找到结果”。
任何人都可以提出更好的preg_replace。
答案 0 :(得分:2)
如果您尝试将正则表达式与数据库调用联系起来,搜索到的值将使其内容被剥离非法字符并作为空字符串发送到数据库(不会找到任何结果):
$searchTerm = '!@#$%^&*()_+';
$searchTerm = preg_replace('/[^\p{L}\p{N}\s]/u', '', $searchTerm);
// $searchTerm = '';
// Send this off to DB (which will return false)
if (!$search->search_db($searchTerm)) {
echo 'No search results!';
}
如果您不希望它触及数据库,您可以将其保留在当前脚本的范围内:
if (preg_match('/[^\p{L}\p{N}\s]/u', $searchTerm)) {
echo 'No search results!';
}