PHP推进或爆炸

时间:2017-04-10 16:23:52

标签: php regex

我正在尝试制作高级搜索页面,其中使用可以使用普通搜索或提前搜索。

pizza @Chicago #312 !IL *606

这是预先搜索的一个示例,此搜索将查找任何具有“#34; pizza"”字样的餐馆名称。例如,对于#34; Pizza Land"。 " @芝加哥"将缩小位于芝加哥的过滤搜索餐厅。 "#312"将搜索餐厅电话,您也可以使用10位数的电话号码,例如"#3125436754"。 "!IL"将从伊利诺伊州搜索餐厅。 " * 606"将搜索餐馆的邮政编码,您也可以使用5位数的邮政编码,例如"#60643"。

高级搜索参数为@适用于城市,!适用于州,*邮政编码,#电话号码。

如果不需要,您不必使用所有搜索参数。以下是搜索的一些示例:

@Chicago这将搜索芝加哥的餐馆城市。

#312654 *60644这将搜索带有电话号码的餐厅" 312654"在邮政编码内" 60644"。

Pasta !NY这将搜索纽约州内有意大利面单词的餐馆名称。

*60642这将搜索" 60642"邮政编码。

Pizza Land这是一个没有参数的普通搜索。

我已准备好数据库,我可以写下搜索查询。问题是我正在使用单个搜索文本输入。我需要php explode或类似选项的单词分离。就像我说的,可能没有高级搜索参数。可以有一个,两个,三个或四个。

我需要一个php函数来从搜索查询中提取参数。

1 个答案:

答案 0 :(得分:0)

我不是正则表达式或preg的专家,感谢@ chris85我完成了我工作所需的功能。

function param($searchVal)
{
    $output = array();
    if (strpos($searchVal, "@") !== false) {
        preg_match('/@[a-zA-Z ]+/', $searchVal, $cityMatch);
        $output["city"] = ltrim($cityMatch[0], '@');
    }
    if (strpos($searchVal, "!") !== false) {
        preg_match('/![a-zA-Z]{2}/', $searchVal, $stateMatch);
        $output["state"] = ltrim($stateMatch[0], '!');
    }
    if (strpos($searchVal, ":") !== false) {
        preg_match('/:[0-9]+/', $searchVal, $zipMatch);
        $output["zip"] = ltrim($zipMatch[0], ':');
    }
    if (strpos($searchVal, "#") !== false) {
        preg_match('/#[0-9]+/', $searchVal, $zipMatch);
        $output["phone"] = ltrim($zipMatch[0], '#');
    }

    preg_match('/^[a-zA-Z 0-9]+/', $searchVal, $queryMatch);
    $output["query"] = $queryMatch[0];

    return $output;
}