2011-11-01 98 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