2012-02-16 47 views
0

我有一個領域,我要求所需的域名,現在它來到一個點,一些用戶包括www.desireddomain領域。具有此值,域名註冊商API我將返回一個錯誤。我想到的方法是使用preg_replace()在句點(包括句點)之前省略任何字符。我有一個<select>包含(.COM,.BIZ,.ORG,.NET)乾淨的主機名

$desired_domain = "www.desireddomain"; // user input 
$will_be = "desireddomain"; // final output after preg_replace() ? 

而且也沒有這個限制了我只期間或有什麼我更應該知道嗎?謝謝。

+0

你最後過濾了可能的.com或斜槓嗎? – Max 2012-02-16 02:44:20

+2

有很多他們可以輸入的形式將是無效的,你需要強有力地驗證用戶輸入 – 2012-02-16 02:45:03

+0

可能重複[如何驗證PHP中的域名?](http://stackoverflow.com/questions/1755144)/how-to-validate-domain-name-in-php) – 2012-02-16 02:45:58

回答

1

由於您沒有進行「模糊」搜索,因此不需要使用正則表達式。如果有一段時間,只需從上一段時間開始。

if (strrpos('www.domain','.')!==false) { 
    $domain = substr('www.domain',strrpos('www.domain','.')+1); 
} 

另外,如果你想確保他們沒有進入.COM,.BIZ,.ORG,.NET,使用爆炸並做了檢查。

$parts = explode('.', 'www.desireddomain.com.net'); 
$domain = array_pop($parts); 
$invalid_parts = array('com','biz','org','net'); 
if (in_array($domain, $invalid_parts) && count($parts)>0) { 
    $domain = array_pop($parts); 
} else { 
    // No valid domain submitted 
} 

在這個例子中,他們被要求使用「COM」作爲域名,即使它沒有有效的。你可以創建一個循環來代替,直到你找到一個有效的部分或用完的項目之前,你可以連續地將項目從數組中移出。

+0

你堅持www只 – 2012-02-16 02:58:39

+0

感謝這一點,但如果輸入是「www.ddmomain.com.net」? – 2012-02-16 03:11:20

+0

根據你的問題,.com/.net/.org在一個下拉菜單中,所以域名將是「net」,我的例子會返回。 www.ddmomain.com將是子域名。 – 2012-02-16 03:33:12

0

使用正則表達式/^.*\./,如:

$desired_domain = "www.desireddomain"; 
$will_be = preg_replace("/^.*\./","",$desired_domain); 
print $will_be; //Outputs "desireddomain" 

請記住,但是,有許多品種的無效數據,用戶可以輸入你最好告訴用戶一個一組限制,然後根據正則表達式檢查它們以獲取有效輸入。

+0

如果'$ desired_domain =「www.desireddomain.com.net」;',我該如何挑選域名? – 2012-02-16 03:02:19

+0

@boy:你真的需要在開始時過濾掉很多東西 - www或者HTML,或者說'; - ...如果某人粘貼了完整的URL,那麼 – Max 2012-02-16 03:08:24

+0

爲此,你可以使用' /(^。*?\。|(\ .. *?){2})/'爲正則表達式,但在此之後它開始變得乏味。用戶可以根據自己的需要放置儘可能多的'.com'和'.net'。你可以告訴用戶只輸入所需的域,並使用'/ \ w + /'進行驗證。 – wecsam 2012-02-16 03:12:49