2016-12-26 23 views
0

我想用不同規則比較單個域。遞歸域和子域比較?

例病例:

我有sub.domain.tld,我想用比較:

  • * - 任何域或子域。
  • *.domain.tlddomain.tld的任何子域。
  • *.sub.domain.tld - 任何子域sub.domain.tld
  • *.sub.*.tld - 任何子域子。以及任何帶有點號的域tld
  • *.*.*.* - 需要兩個任意域的任何子域任意點。
  • domain.* - 任何TLD頂級域名(gTLD,國家代碼頂級域名,STLD等)

如果我比較,我希望得到這樣的:

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

我想在正則表達式,但我不知道如何開始使用它。 我嘗試轉義*preg_quote並進行比較,但僅適用於第一個和第二個示例。

回答

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