2016-01-20 78 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