2011-11-01 133 views
1

我想完全停止所有的IP和子域名。有人編輯/修改它,因此它不會將IP和子域添加到數據庫中。我只想在我的數據庫中使用main(Top-Leven Domain)。這裏是我使用的模式:停止IP地址和子域名,只允許域名

$pattern = '/^(([\w]+:)?\/\/)?(([\d\w]|%[a-fA-f\d]{2,2})+(:([\d\w]|%[a-fA-f\d]{2,2})+)[email protected])?([\d\w][-\d\w]{0,253}[\d\w]\.)+[\w]{2,4}(:[\d]+)?(\/([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)*(\?(&?([-+_~.\d\w]|%[a-fA-f\d]{2,2})=?)*)?(#([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)?$/'; 

if (preg_match($pattern, $url)) { 
header("Location: good.php"); 
} else { 
header("Location: bad.php"); 
die(); 
} 
+0

那麼目前這種模式匹配是什麼? – Nathan

回答

2

頂層域只包含字母。這裏是a list of TLDs

我假設你打算說'二級域名',但即使這樣也會給你帶來麻煩。例如,.co.uk是非常受歡迎的SLD,但它不用於網站或其他任何東西。您提到的域名位於SLD下方的第三層。 (anycompanywebsite.co.uk)。

所以,我說的是,你不能用一個簡單的正則表達式來做到這一點。您需要擁有第二,第三甚至第四級的列表,這些列表被用作TLD。

+0

哦,所以.co.uk和其他域也將被阻止:(那麼最好的解決方案/代碼是什麼或者我需要使用Parse_url函數而不是這種模式? –

+0

嗯,這取決於目的。子域可以非常不同例如,他們可以指向另一個IP地址,所以你應該懷疑你是否真的不希望他們在你的數據庫中,如果確實如此,你需要一個全面的TLD列表來檢查。 (至少目前爲止),你只需要檢查輸入的值是不是一個IP地址,注意域也可以是數字,這取決於TLD,只有TLD本身總是文本(現在) – GolezTrol

+0

由域名是一個數字,我的意思是二級域名,例如http://9292.nl – GolezTrol