2012-01-16 44 views
0

我創建了一個黑名單,我想阻止給定URL的所有變體。例如,使用正則表達式來阻止域

www.google.com 
google.com 
google.com/maps 
sub.google.com 
google.com/dir/dir2/dir3 

我知道旁邊沒有關於正則表達式,到目前爲止,我有這個愚蠢的嘗試:

$blacklist = array(
'\.google.\\', 
); 

有人能幫助我嗎?

編輯:

我也想阻止帶有特定擴展名,例如 .ME .XXX

回答

1

所有域如果你只是做了pre_match你可能只需要沿東西線的:

<?php 
$subject = "somedomain"; 
$pattern = '/\.google\./'; 
if(preg_match($pattern, $subject)){ 
    die('blacklisted'); 
} 
?> 
+0

並阻止與(比如說)擴展'.me',使用 '/\.me\b/' – 2012-01-16 10:23:14

+0

加入你的正則表達式後,我有'$所有域黑名單=數組( '/\.google\./', );'和'$ host = parse_url($ url,PHP_URL_HOST); (preg_match($ host,$ GLOBALS ['blacklist'])){ return false; '但它返回true而不是false – 2012-01-16 10:29:51

+0

我認爲你有你的模式和黑名單數組倒退,這是針乾草堆不是在這個函數中的另一種方式。 – 2012-01-16 10:31:37

0

如果你只是要阻止的域名,那麼爲什麼不直接使用strpos它真的好快,然後進行簡單的模式匹配的正則表達式匹配。檢查出的鏈接

$domain_name = "www.maps.google.com"; 
if(strpos($domain_name,"google") > 1) 
    do sumthing here 
else 
    do sumthing 

希望它能幫助:)

+0

如果域名是maps.googles.com,該怎麼辦?注意最後加上's'。它會返回一個誤報嗎? – 2012-01-16 10:56:14

+0

Paul bro googles.com和google.com都是不同的域名。正如問題所述,用戶想要阻止域中的所有變化,而不是域本身 – casper123 2012-01-16 19:42:43