2014-01-30 52 views
0

我有这个问题。例如我有这个URL http://site-myname.testingsite.localhost/auth/register?r=,uwing $ _SERVER ['REQUEST_URI']我能够得到值'auth/register?r ='。现在我想要做的就是使用正则表达式的preg_match检查'/认证/注册?R =''/认证/注册?R = anyvalue',这样,如果任何用户谁将具有任何值或空值的查询字符串'r'将在范围之内。比较给定的子域与正则表达式

我最初的解决方案是:

preg_match('#/auth/register\?r=^$#', $_SERVER['REQUEST_URI']) 

但它似乎并没有工作。请帮帮我!我现在被困在这个问题上一个小时了,我不想浪费时间。答案将非常感谢,谢谢!

+0

不清楚。 'auth/register?r ='与子域有关吗? – grebneke

+0

为什么不是'$ _GET ['r']'? –

+0

大家好,很难解释,但我有理由为什么我不得不使用正则表达式而不是$ _GET。我需要改善我的正则表达式能力。希望我的问题将得到解答。谢谢 –

回答

0

不能完全确定,我跟随的问题,但似乎你想要的只是

^/auth/register\?r= 

,如果你想捕捉的价值r也许......

^/auth/register\?r=([^;&]*) 
+0

感谢!它的工作,只要有一个结束分隔符^ –

+0

^只匹配字符串的开始;你需要使用$来匹配结束(除非你的查询字符串中有一个字面值“^” ?) – BRFennPocock

1

有一试:

preg_match('#/auth/register\?r=[^&]*#', $_SERVER['REQUEST_URI']) 
+0

优秀的答案!这工作。但我选择接受BRPocock的答案,因为它更简单易懂。谢谢,欢呼!我想投票你的答案,但我还不能。 :( –

0

试试这个,它验证了我:

$uri = $_SERVER['REQUEST_URI']; 
$strRegex = '%/auth/register\?r=%'; 
if (preg_match($strRegex, $uri)) echo "matched"; 
else echo "not matched";