PHP 判断是否为域名|判断是否为正确格式的域名

PHP 判断是否为域名|判断是否为正确格式的域名

!!!注意这代码判断的是域名,不是 URL!!!

因为项目有需求,首先想到去 Google 搜,翻了几页,未找到能满足自己需求的代码,所以自己动手造了个轮子

要想判断一个域名格式是否正确,得先知道域名是由哪些字符串组成的

Google 查阅了一些资料,得出一下要求

PS:在下述中,“域名” 所指的是,如 nowtime.cc 中的 nowtime

  1. “域名” 只能由 大小写字母数字- 组成
  2. “域名” 不能以 - 开头或结尾
  3. “域名” 每段长度最小 1 位,最长 63 位(不包含 “域名后缀”,以 . 分段)
  4. “域名总长度” 不能超过 255 位(不包含域名后缀;不包含 .

知道要求后,就可以开始造轮子了,然后就有了以下代码:(注意这代码判断的是域名,不是 URL)

<?php
/**
 * User: wenzhouChan <wenzhouchan@gmail.com>
 * Date: 2018/11/10
 * Time: 21:02
 */

/**
 * 判断是否为域名(中文域名必须先转码,否则将返回 false)
 * !!!注意判断的是域名,不是 URL!!!
 *
 * @author WenzhouChan <wenzhouchan@gmail.com>
 * @param $domain
 * @return bool
 */
function isValidDomain($domain)
{
    //判断是否包含 .
    if(strpos($domain, '.') === false) {
        return false;//未包含“.”
    }

    //以 . 分割
    $explode = explode(".", $domain);
    $strlenAll = 0;

    foreach ($explode as $k=>$v) {
        if(empty($v)){
            return false;
            break;
        }

        //判断是否包含了除 a-z或A-Z或0-9或- 以外的字符
        $rule = '/^(?!-)+[a-zA-Z0-9-]*$/';
        $match = preg_match($rule, $v);
        if($match === (int) 0){
            return false;//包含了除 a-z或A-Z或0-9或- 以外的字符
            break;
        }

        $strlen = strlen($v);
        if($k > (int) 0){
            $strlenAll = $strlen+$strlenAll;
        }

        //判断每段域名长度是否大于 1位 和 小于 63位
        if($strlen < (int) 1 || $strlen > (int) 63){
            return false;//域名长度格式不规范
            break;
        }

        //判断域名总长度是否超过 255位
        if($strlenAll > (int) 255){
            return false;//域名总长度超过了 255(不包含连接符“.”)
            break;
        }
    }

    return true;
}

如无特别声明,该文章均为 现在网NowTime.cc)原创,转载请遵循 署名-非商业性使用 4.0 国际(CC BY-NC 4.0) 协议,即转载请注明文章来源。


标签: PHP, DNS, 域名, 正则

赞 (0)

添加新评论