2016-12-26 13 views
0

私は異なるルールを持つ単一のドメインを比較したいと思います。再帰的ドメインとサブドメインの比較?

例例:

は私がsub.domain.tldを持っていると私は、と比較したい:

  • * - 任意のドメインまたはサブドメインを。
  • *.domain.tlddomain.tldのいずれかのサブドメイン。
  • *.sub.domain.tld - サブドメインがsub.domain.tldのいずれかです。
  • *.sub.*.tld - サブのサブドメイン。と、ドットのあるドメインtldです。
  • *.*.*.* - 任意のドットを持つ任意のドメインのサブドメインの2つのサブドメインを必要とします。
  • domain.* - (などのgTLD、ccTLDの、STLD)どれTLD

私が比較した場合、私はのような結果を期待:

  • * - true
  • *.domain.tld - true
  • *.sub.domain.tld - false
  • *.sub.*.tldからfalse
  • *.*.*.* - false
  • domain.*からfalse

私は正規表現ではと思うが、私はそれを起動する方法のアイデアを持っていません。 *をエスケープしてpreg_quoteとして試してみましょう。ただし、最初の例と2番目の例でのみ動作します。

答えて

2

preg_quoteを実際に使用する必要がありますが、その結果のを.*?に置き換えてください。これは正規表現で、任意の文字ですが、必要以上のものではありません。

あなたはこの機能を使用することができます:

function matchDomain($mask, $domain) { 
    $mask = '/^' . str_replace('\\*', '.*?', preg_quote($mask)) . '$/'; 
    return preg_match($mask, $domain) == 1; 
} 

はこのようにそれを呼び出します。

var_dump(matchDomain('*.*.*.tld', 'test.sub.domain.tld')); // true 
var_dump(matchDomain('*.*.domain.*', 'test.sub.domain.tld')); // true 
関連する問題