我想要一个正则表达式(或类似的东西)与preg_match一起使用,它允许我验证DNS。我将制定DNS将被阻止的规则(不能使用)。
例如:
google.* (sting google.com cannot work, but sgoogle.com will work)
.google. (any subdomain for google on any TLD would be blocked) etc...
所以我将使用上述规则来变量$ rules:
$rules = array('google.*', '.google.');
我想查看$ dns =" sgoogle.com"应该被阻止。
怎么做?
答案 0 :(得分:2)
这样就可以了:
<?php
$testurls = array(
'www.google.com',
'www1.google.co.jp',
'.google.com',
'www.sgoogle.com',
'www.example.com',
'www.example.xxx',
'www.specialdummy.org',
);
$rules = array(
'.google.*',
'*.xxx',
'.*dummy.',
// more ...
);
$regex = '';
foreach($rules as $rule) {
$regex .= (!empty($regex) ? '|' : '') .
str_replace(array('.','*'), array('\.','.*?'), $rule);
}
echo "Regex: $regex<br />";
foreach($testurls as $url) {
$notallowed = preg_match('/('.$regex.')/', $url);
echo $url . ': ' . ($notallowed ? 'NOT allowed' : 'allowed') . '<br />';
}
?>
结果:
www.google.com NOT allowed
www1.google.co.jp NOT allowed
.google.com NOT allowed
www.sgoogle.com allowed
www.example.com allowed
www.example.xxx NOT allowed
www.specialdummy.org NOT allowed
规则说明: