正则表达式或类似的东西,以检查DNS是否应被阻止

时间:2016-02-05 11:31:51

标签: php regex

我想要一个正则表达式(或类似的东西)与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"应该被阻止。

怎么做?

1 个答案:

答案 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

规则说明:

  • 规则被视为正则表达式的一部分。
  • 规则可能包含句点(。)和星号(*)。
  • 字面意思
  • 星号表示&#34;任何字符串,直到找到下一个字符或直到规则结束为止#34;
  • 其他正则表达式控制字符可以通过反斜杠(\)
  • 进行转义