2016-01-20 84 views
1

我非常接近我想实现的目标。允许多个URI参数通过正则表达式

我有这样的:

'/create-group/([A-Za-z0-9\-\_]+)(?:/([A-Za-z0-9\-\_]+))?(?:(\?|&)(groupid|copyofgroup|ref)=([A-Za-z0-9\-\_]+))?' 

它让我能阻止URL可以被输入和访问,如:

/create-group/123/456?groupid=789 

在正则表达式的最后一位,我让3参数(groupid,copyofgroup和ref)。

这是一切都好,但我不能找出一种方法让我的preg_match验证这3个参数的无限数。现在,我只限于一个参数的实例。

我想我的preg_match()接受:

/create-group/123/456?groupid=789&ref=101112&copyofgroup=789 

我试过乘如*+,但无济于事。

谢谢!

+1

为什么使用正则表达式而不是'$ _GET','$ _POST'或'$ _REQUEST'超全球变量? –

+0

@Nordenheim我不确定你的意思?在获取相关文件之前,此代码位于顶层。我只想限制可以在URI中插入哪些参数。 $ _GET superglobals将如何帮助我? – Justin01

+0

用'[[:alnum:] _-]'替换'[A-Za-z0-9 \ - \ _]'。角色在方括号内失去了他们的特殊性,所以你不需要用反斜杠来逃避事物,而在任一端的破折号意味着一个破折号而不是一个范围分隔符。而角色类就是合理的。 – ghoti

回答

0

找到了解决方案:

'/create-group/([A-Za-z0-9\-\_]+)(?:/([A-Za-z0-9\-\_]+))?(?:((\?|&)(groupid|copyofgroup|ref)=([A-Za-z0-9\-\_]+))+)?' 
1

可以添加{0,3},而不是,在结束 “?”:

/创建组/([A-ZA- (|:/ ref ref ref z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z -z0-9 -_] +)){0,3}

我试图这里: https://regex101.com/

+0

非常有趣,不知道为什么我没有想到这一点。非常感谢你! – Justin01