我希望开发一个搜索功能,允许用户只搜索项目,或修改他们的搜索与括号中的价格范围。也就是说,如果他们正在寻找一辆汽车,那么他们可以输入car并接收数据库中所有的汽车,也可以输入car(100,299)或car(100,299)并只接收数据库中价格范围在100到299之间的汽车。
之前,我做了三个不同的爆炸函数调用,但这很麻烦,看起来非常丑陋。我还尝试将括号放入数组中,然后将其与搜索的单词进行比较(单词基本上是字符数组),但这不起作用。最后,我一直在阅读strpos和substr,但它们似乎不符合要求,因为strpos返回字符的第一次出现,而substr在特定发生后返回指定长度内的字符。
举个例子,strpos的问题是用户可以输入括号,然后调用搜索函数,天知道是什么。例如,substr的问题是价格范围变化很大
您可以使用preg_match来解析搜索字符串-我假设这是您遇到问题的部分。
if (preg_match('/car ?'(([^,]+), ?([^')]+)')/', $search_text, $matches)) {
$low_price = $matches[1];
$high_price = $matches[2];
//do your price filtering here
}
正则表达式可能需要一点调整,我不记得在字符类中括号是否需要转义。
是的,Sam是对的。您应该使用正则表达式来完成此操作。
在文档
中查找preg_match()要完成他的回答,您的情况的正则表达式是:
$regex = "^([a-zA-Z]+)'s'(([0-9]+),([0-9]+)')$"
if (preg_match($regex, $search_text, $matches)) {
$type = $matches[0];
$low_price = $matches[1];
$high_price = $matches[2];
//do your price filtering here
}
要小心,因为包含匹配的数组从索引0开始,而不是1。