与运营商爆炸

时间:2013-08-02 18:01:32

标签: php operators explode

我有一个限制&的工作代码验证子域。

 $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

提前致谢

2 个答案:

答案 0 :(得分:2)

这可以给你你想要的东西。

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

答案 1 :(得分: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.'));