1

我正在尝试在 api enpoint 中获取这两个字段,以便它基于它进行查询。例子。

api/evenSession/123123123/eventSession?token=1234656&filter= chris moreno

我的控制器按名字或姓氏搜索。但我想创建一个端点,如果它在“克里斯莫雷诺”中传递,它会查询数据库

这是我的 $filter 代码

if(preg_match_all('/^[A-Z]*[a-z]*(-|\s)[A-Z]*[a-z]*$/', $filter)){
       $searchFields = [
           'a.lastName',
           'a.firstName'
       ];

我希望能够在我的过滤器中捕获两个字段(克里斯和莫雷诺),以便我可以将其传递给我的查询,以便它可以检查使用名字和姓氏签入的人(缩小搜索范围)

4

1 回答 1

1

在这里,如果我们的输入如所列,我们将有三个捕获组,例如,我们将从以下表达式开始:

token=(.*?)&filter=\s*([\w]+)\s+([\w]+)

演示 1

在这里,我们在这个捕获组中的令牌值:

(.*?)

以及我们在这两个单独的捕获组中的名称:

([\w]+)

最后两组可以修改,如果我们有像奥尼尔这样的名字,那可能不属于[A-Za-z]char类。例如,我们可以允许任何字符:

token=(.*?)&filter=\s*(.+?)\s+(.+) 

演示 2

测试

$re = '/token=(.*?)&filter=\s*([\w]+)\s+([\w]+)/m';
$str = 'api/evenSession/123123123/eventSession?token=1234656&filter= chris moreno
api/evenSession/123123123/eventSession?token=1234656&filter= alice bob
';

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);

$searchFields = [];
foreach ($matches as $key => $value) {
    $searchFields[$key] = [$value[2], $value[3]];
}

var_dump($searchFields);

演示 3

于 2019-06-13T18:29:48.677 回答