2013-08-02 144 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