好吧,在我的代码中,我有一个URL,它会传递给我的函数:testURL($url)
,按顺序:
base url
是否为域名('http://www.example.com'
)测试各种子字符串:
ShowForum
Amex
Owners
ManagementCenter
WeatherUnderground
MapPopup
asp
pages
如果true
有base url
但与子字符串不匹配,则返回return false;
,否则function testURL($url){
if ((substr($url, 0, 23) == "http://www.example.com/") && (substr($url, 23, 3) != "asp") && (substr($url, 23, 4) != "Amex") && (substr($url, 23, 5) != "pages") && (substr($url, 23, 16) != "ManagementCenter") && (substr($url, 23, 16) != "Owners") && (substr($url, 23, 9) != "ShowForum") && (substr($url, 23, 8) != "MapPopup") && (substr($url, 23, 18) != "WeatherUnderground")) {
return false;
} else {
return true;
}
这是代码
testURL('http://www.example.com/Amex'); --> returns true
testURL('http://www.example.com/PayPal'); --> returns false
示例:
if (testURL('http://www.example.com/Visa')){
return;
}
在我的案例中,它被称为:
{{1}}
随着时间的推移,被禁止的子串列表将变大。 那么,是否有更好的方法来匹配变量长度的子串,然后匹配巨型if-else循环?
提前致谢!
答案 0 :(得分:1)
这应该适合你:
(这里我只用parse_url()
解析网址,然后检查主机是否匹配,以及路径是否在in_array()
数组中
<?php
function testURL($url) {
$parsed = parse_url($url);
if($parsed["host"] == "www.example.com" && !in_array(explode("/", $parsed["path"])[1], ["asp", "Amex", "WeatherUnderground", "MapPopup", "ShowForum", "Owners", "ManagementCenter", "pages"]))
return false;
else
return true;
}
?>