我做了一个搜索引擎,它有两个输入,一个用于你想要搜索的内容,一个用于城市和州,这是一个很棒的小项目。
我正在尝试使用
str_replace()
来表示城市和州。但是,用户可以输入城市并说明是否使用逗号或不使用逗号,或者使用空格或双倍空格,它将找到结果(因此我使用 str_replace
的原因),但只有 $strr
变量有效,其他变量不起作用。
这就是我所拥有的
$userinput = $request->input('$what');
$city&state = $request->input('$where');
$str = trim(preg_replace('/\s+/', ' ', $userinput));
$sty = trim(preg_replace('/\s+/', ' ', $userinput));
$strr = str_replace(", ", ",", $city&state);
$strrr = str_replace(", ", ",", $city&state);
$strrrr = str_replace(" ,", " ," ," ,", $city&state);
$stq = str_replace(",", " ", $city&state);
$stw = str_replace(",", " ", $city&state);
$pro=User::where('tags', 'Like', '%' . $str . '%')
->where(function ($query) use ($strrr, $strr, $strrrr, $stq, $stw) {
$query->where('cityandstate', 'LIKE', '%' . $strr . '%')
->orWhere('cityandstate', 'LIKE', '%' . $strrr . '%')
->orWhere('cityandstate', 'LIKE', '%' . $strrrr
.'%') ->orWhere('cityandstate', 'LIKE', '%' . $stq . '%') ->orWhere('cityandstate', 'LIKE', '%' . $stw . '%');
})
->orWhere('company_name', 'Like', '%' . $str . '%')
->where(function ($query) use ($strrr, $strr, $strrrr) {
$query->orWhere('cityandstate', 'LIKE', '%'. $strr .'%')
->orWhere('cityandstate', 'LIKE', '%' . $strrr . '%')
->orWhere('cityandstate', 'LIKE', '%' . $strrrr . '%');
})
->inRandomOrder()
->paginate(20);
我建议不要使用多个
str_replace
来清理输入,作为一般示例,下面的代码将删除任何前导/尾随或双空格和逗号,并替换为单个空格。
function clean_input($str) {
return preg_replace('/[ ,]+/', ' ', trim($str));
}
$searches = ['City, State', 'City State', 'City , State', 'City State', ' City state '];
foreach ($searches as $search) {
print cleanInput($search) . PHP_EOL;
}
// Prints.
City State
City State
City State
City State
City state