【发布时间】:2013-12-20 00:55:53
【问题描述】:
我正在为我的网站编写一些代码,我需要找到一种方法来检测用户的输入并确定它是域还是 IP。如果它是一个域,它将从例如解析域。 http://www.google.com 到 google.com,然后解析它并将其回显到用户输入字段中。如果它是 IP,那么它将跳过所有这些步骤并保留在 IP 用户输入字段中。
这是我目前所拥有的:
<?php
if( $_POST['submit'] )
{
$ip_address=$_POST["host"];
if (ctype_alpha($ip_address))
{
// get host name from URL
preg_match('@^(?:http://)?([^/]+)@i', $ip_address, $matches);
$host = $matches[1];
// get last two segments of host name
preg_match('/[^.]+\.[^.]+$/', $host, $matches);
$new_ip_address = $matches;
//resolve parsed ip
$presolved = gethostbyname($new_ip_address);
}
else
{
echo "Do stuff.\n";
}
}
?>
【问题讨论】:
-
我认为
http://的存在(或缺少)与IP 地址无关,除非这纯粹是为了在网页上显示——浏览器将采用该协议。另外,https呢? -
@Michael 喜欢它! user2934716,您也应该查看该问题的已接受答案:stackoverflow.com/a/11046121/2812842
-
我会使用类似于
(?:^.*?//)?(.*?)[:/]?的正则表达式来捕获“可能的域名”。这应该匹配来自http://foo.com:80、//foo.com、foo.com/bar等的foo.com。如果foo.com没有碰巧解析为IP,或者它们“意外离开子域”,那么......哦,好吧:你想帮忙。 -
(此外,并非所有注册的域都连接到 IP:在某些情况下可能需要“whois”。)
标签: php preg-match