php regex验证url片段对列表

时间:2015-01-27 10:13:48

标签: php regex validation

我正在尝试根据允许的来源列表验证页面中的引荐来源。我在最后一个" /"之后提取了引荐来源网址的一部分。现在想要根据有效来源列表进行检查。有效片段的格式为[filename] [?id = nnn],不允许其他字符,例如" view.php?id = 1"没问题" view.php?id = 1& nasty = 1"无效。

我正在尝试的方法是:

$fragOK = preg_match('/'.implode('|', $okSrc).'\?id=[0-9]+$/', $frag);

其中$ okSrc是有效源文件名的数组,$ frag是提取的字符串。显然这有点问题,因为$ fragOK === 1,我上面给出了两个例子。谁能解释一下我哪里出错了?

使用var_dumps进行更新:

----------------------------------------------------
$okSrc
----------------------------------------------------
array(4) {
  [0]=>
  string(8) "view.php"
  [1]=>
  string(10) "detail.php"
  [2]=>
  string(11) "request.php"
  [3]=>
  string(12) "overview.php"
}

----------------------------------------------------
$frag
----------------------------------------------------
string(21) "view.php?id=1&nasty=1"

2 个答案:

答案 0 :(得分:0)

将脚本放在一个组中:

$fragOK = preg_match('/(?:'.implode('|', $okSrc).')\?id=[0-9]+$/', $frag);
//              here __^^^                  and __^

您可能还想在$ okStr上使用preg_quote来逃避这些点。

答案 1 :(得分:0)

问题是你没有用括号括起来的字符串。

请参阅此demo

更新:'。'例如,在view.php中不会影响匹配