如何在php中验证正确的域名和子域

Posted

技术标签:

【中文标题】如何在php中验证正确的域名和子域【英文标题】:How to validate a correct domain name and sub domain in php 【发布时间】:2011-03-08 18:44:03 【问题描述】:

如何删除 www验证 有效域名。

有效域

domain.com
subdomain.domain.com
sub-domain.domain.com

无效域

www.domain.com
www.subdomain.domain.com
http://www.domain.com/
http://www.subdomain.com/
www.domain.com/folder/

代码如何?

$domain ='www.domain.com/folder/';
if() 
// validate here

【问题讨论】:

www.domain.com, www.subdomain.domain.com - 这里什么无效? 您为什么将 www 子域与其他所有子域区别对待?它没有特殊含义,除了通常用于网站,但约定也与其他子域相关(例如 ftp、smtp、imap 等) 这只是为了我的记录。我想在没有 www 的情况下存储域。 @wow 您应该被告知在某些域上www 子域是必需的。 【参考方案1】:

试试这个:

if (!preg_match('/^[a-zA-Z]+[a-zA-Z0-9-]+[a-zA-Z0-9]+$/', $subdomain) || substr_count($subdomain,'--') >= 1) 
                echo "Invalid Subdomain";
              
              else 
                 echo Valid Subdomain; 
              

【讨论】:

【参考方案2】:
$url = "http://***.com/";
if (preg_match('/^(http|https|ftp)://([A-Z0-9][A-Z0-9_-]*(?:.[A-Z0-9][A-Z0-9_-]*)+):?(d+)?/?/i', $url)) 
    echo "Your url is ok.";
 else 
    echo "Wrong url.";

【讨论】:

【参考方案3】:

首先,手动去掉 www.然后只需确保它的格式为 domain.tld 或 something.domain.tld

$domain = str_replace('www.','',$domain);

if(preg_match('/([a-zA-Z0-9\-_]+\.)?[a-zA-Z0-9\-_]+\.[a-zA-Z]2,5/',$domain)) //valid domain

【讨论】:

您似乎把., 混在一起了……而且TLD 不限于4 个字符……而且问题似乎是要拒绝带有www 的主机名,而不是标准化。 something.museum? TLD 中的 6 个字符。也可以再加一个检查,域名和子域名最多63个字符。 如果您使用 str_replace 并且有这样的域名,则域字符串将中断:domainwww.com 因为您从字符串中删除了www. 的所有实例,结果最终将看起来像这样@ 987654328@.【参考方案4】:

看看http://framework.zend.com/apidoc/core/Zend_Validate/Zend_Validate_Hostname.html (Zend_Validate_Hostname) 类。我认为您可以在 Zend Framework 之外使用它,只需稍作调整即可。

【讨论】:

以上是关于如何在php中验证正确的域名和子域的主要内容,如果未能解决你的问题,请参考以下文章

什么是子域名?如何设置子域名解析?

如何在子域上上传 laravel 项目?

自己购买的域名如何设置子域名,如何设置访问多个项目,万网

如何部署林根域子域和域

一般的SSL证书二级域名可以使用吗?

如何使用子域和 AJAX 使 PHP 会话工作?