2013-08-02 113 views
0

我有一個工作代碼來限制&驗證子域。與運營商分解

$exp = explode('.', 'blog.mydomain.my.'); 

print_r($exp); 
if(count($exp) == 3 && $exp[1] == "mydomain" && $exp[2] == "my" || $exp[3] == "") { 
    echo "<br>"; 
    echo 'subdomain valid'; 
} else{ 
    echo "<br>"; 
    echo 'not valid'; 
} 

現在需要檢查,如果它只是假的,我不那麼肯定了$exp[3] != ""比較。從下面的示例子域應該是有效的,但它給我錯誤。

echo "<br>";echo "<br>"; 
$exp2 = explode('.', 'blog.mydomain.my.'); 

print_r($exp2); 
if(count($exp2) != 3 || $exp2[1] != "mydomain" || $exp2[2] != "my" || $exp[3] != "") { 
    echo "<br>"; 
    echo 'not valid'; 
} 

子域的數目接受是hello.mydomain.myhello.mydomain.my.(尾隨點)。而hello.world.mydomain.my不被接受。

在此先感謝

+0

有什麼錯誤到底是什麼?代碼不工作? – Maximus2012

+0

我覺得你要麼應該檢查'count($ exp2)!= 4',還是應該取消最後一個條件,就好像計數是3,最後一個條件應該超出限制 – StephenTG

回答

2

這應該給你想要的東西。

if(count($exp2) < 3 || count($exp2) > 4 || $exp2[1] != "mydomain" || $exp2[2] != "my" || (count($exp2) != 4 && $exp[3] != "")) { 
    echo "<br>"; 
    echo 'not valid'; 
} 
+0

是的,它是有效的。謝謝 – sg552

+0

爲什麼不是正則表達式? $ valid = preg_match('/^hello \ .domain \ .my \。$ $',$ domain)?真假; – AlexP

+0

@AlexP具有不同的子域模式,也可以工作。你應該改進和張貼作爲答案...我會upvote – Orangepill

2

我會去一個正則表達式的解決方案,甚至可能encapsulate它的功能:

function isValidDomain($domain) 
{ 
    return preg_match('/^[\w]+\.(mydomain)\.(my)\.?$/', $domain) ? true : false; 
} 

var_dump(isValidDomain('www.google.com')); 
var_dump(isValidDomain('test.invalid.domain')); 
var_dump(isValidDomain('hello.mydomain.my')); 
var_dump(isValidDomain('hello.mydomain.my.')); 
+0

感謝您的回答:) – sg552

+1

我認爲意圖是任何子域匹配,所以也許''/^[\w]+\.(mydomain)\.(my)\.?$/ ' – Orangepill

+0

是的任何子域名都與我的域名相匹配。 – sg552