如何在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中验证正确的域名和子域的主要内容,如果未能解决你的问题,请参考以下文章