【发布时间】:2026-01-26 13:50:02
【问题描述】:
我离我想要达到的目标已经很近了。
我有这个:
'/create-group/([A-Za-z0-9\-\_]+)(?:/([A-Za-z0-9\-\_]+))?(?:(\?|&)(groupid|copyofgroup|ref)=([A-Za-z0-9\-\_]+))?'
它允许我限制可以输入和访问的 URI,例如:
/create-group/123/456?groupid=789
在正则表达式的最后一位,我允许 3 个参数(groupid、copyofgroup 和 ref)。
这一切都很好,但我想不出办法让我的 preg_match 验证这 3 个参数中的 无限 个参数。目前,我仅限于一个参数的 1 个实例。
我希望我的 preg_match() 接受:
/create-group/123/456?groupid=789&ref=101112©ofgroup=789
我尝试了诸如* 和+ 之类的乘数,但无济于事。
谢谢!
【问题讨论】:
-
你为什么使用正则表达式而不是
$_GET、$_POST或$_REQUESTsuperglobals? -
@Nordenheim 我不确定你的意思是什么?在获取相关文件之前,此代码位于顶层。我只是想限制在 URI 中可以插入哪些参数。 $_GET superglobals 将如何帮助我?
-
将
[A-Za-z0-9\-\_]替换为[[:alnum:]_-]。字符在方括号内失去了它们的特殊性,所以你不需要用反斜杠来转义,两端的破折号意味着破折号而不是范围分隔符。字符类才有意义。 -
@Justin01 标签建议您使用 PHP,这意味着您可以
$_GETURI 字符串中所需的参数并忽略其余部分,而不是费力地编写代码。