php 正则表达式根据列表验证 url 片段
php regex validate url fragment against list
我正在尝试根据允许的来源列表验证页面中的引荐来源网址。我在最后一个“/”之后提取了引荐来源 URL 的部分,现在想根据有效来源列表对其进行检查。有效片段将采用 [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"
将脚本放在一个组中:
$fragOK = preg_match('/(?:'.implode('|', $okSrc).')\?id=[0-9]+$/', $frag);
// here __^^^ and __^
您可能还想在 $okStr 上使用 preg_quote
来转义点。
问题是您没有用括号括起来的字符串。
看到这个demo
更新:“。”例如在 view.php 中不会影响匹配
我正在尝试根据允许的来源列表验证页面中的引荐来源网址。我在最后一个“/”之后提取了引荐来源 URL 的部分,现在想根据有效来源列表对其进行检查。有效片段将采用 [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"
将脚本放在一个组中:
$fragOK = preg_match('/(?:'.implode('|', $okSrc).')\?id=[0-9]+$/', $frag);
// here __^^^ and __^
您可能还想在 $okStr 上使用 preg_quote
来转义点。
问题是您没有用括号括起来的字符串。
看到这个demo
更新:“。”例如在 view.php 中不会影响匹配