PHP 判断是否为域名|判断是否为正确格式的域名 作者: Chuwen 时间: 2018-11-10 分类: PHP # PHP 判断是否为域名|判断是否为正确格式的域名 > ## !!!注意这代码判断的是域名,不是 URL!!! > ### 因为项目有需求,首先想到去 Google 搜,翻了几页,未找到能满足自己需求的代码,所以自己动手造了个轮子 ## 要想判断一个域名格式是否正确,得先知道域名是由哪些字符串组成的 > ### Google 查阅了一些资料,得出一下要求 > #### PS:在下述中,`“域名”` 所指的是,如 `nowtime.cc` 中的 `nowtime` 1. “域名” 只能由 `大小写字母`、`数字` 和 `-` 组成 2. “域名” 不能以 `-` 开头或结尾 3. “域名” 每段长度最小 1 位,最长 63 位(不包含 `“域名后缀”`,以 `.` 分段) 4. “域名总长度” 不能超过 255 位(不包含域名后缀;不包含 `.`) ## 知道要求后,就可以开始造轮子了,然后就有了以下代码:(注意这代码判断的是域名,不是 URL) ``` * Date: 2018/11/10 * Time: 21:02 */ /** * 判断是否为域名(中文域名必须先转码,否则将返回 false) * !!!注意判断的是域名,不是 URL!!! * * @author WenzhouChan * @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; } ``` 标签: PHP, DNS, 域名, 正则