2013-12-20 71 views
1

我正在爲我的網站編寫一些代碼,我需要找出一種方法來檢測用戶的輸入並確定它是否是域或IP。如果它是一個域,它將從例如http://www.google.comgoogle.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"; 
    } 
} 
?> 
+0

我不認爲「http://」(或缺少)會影響IP地址,除非這純粹是爲了在網頁上顯示 - 瀏覽器將假定該協議。另外,「https」呢? –

+0

@邁克爾喜歡它! user2934716你應該看看在這個問題上接受的答案:http://stackoverflow.com/a/11046121/2812842 –

+0

我會使用一個類似於'(?:^。*?//)的正則表達式?(。* ?)[:/]?'來捕獲「可能的域名」。這應該與'http://foo.com:80','// foo.com','foo.com/bar'等'foo.com'匹配。如果'foo.com'沒有發生解決IP或他們「意外地離開子域」然後..哦,好吧:你試圖幫助。 – user2864740

回答

1

你有沒有考慮從另一個方向看的呢?檢測IP地址文字比解析和驗證DNS名稱要容易得多。

  1. 通過'.'解析與parse_url
  2. 拆分$url['host']的URL。如果結果是四個整數元素的數組,那麼它可能是一個IP地址。
  3. 用於檢查每個整數是否在適當範圍內(例如,第一個字節爲1-255,其餘八位字節爲0-255)的獎勵點。

在任何情況下,使用parse_url而不是試圖用正則表達式錘子來破解這個。

0

嘗試使用http://php.net/filter_var

var_dump(filter_var('http://example.com', FILTER_VALIDATE_URL, FILTER_FLAG_PATH_REQUIRED)); 
+0

適用於所有答案所以遠:我很困惑,我是否想改變所有我所知道的或哪一部分? – Beardo

0

要檢查是否輸入了一個IP,您可以使用PHP的ip2longhttp://php.net/manual/en/function.ip2long.php

參見下面的例子中,它會返回一個IP或假。

<?php 
function checkOrMakeIp($address) { 
    $long = ip2long($address); 
    if ($long != -1 || $long !== FALSE) { 
     // It is a IP, just return the address 
     return $address; 
    } elseif($ip = gethostbynamel($address)) { 
     // It is a hostname, but now we have the ip, return it 
     return $ip[0]; 
    } 

    return false; 
} 
?> 

通知的gethostbynamel,它將返回FALSE如果主機名無法解析;否則是一個數組。 (http://www.php.net/manual/en/function.gethostbynamel.php

+0

這似乎是我以後,但我無法得到它的工作。您是否有電子郵件或其他可以向我提供進一步幫助的內容? – Beardo

相關問題