2009-08-26 35 views
0

對於我的用戶,我需要提供一個屏幕,他們可以在textarea中輸入多個域名。用戶可以將域名放在不同的行上,或者用空格或逗號分隔它們(甚至可能是分號 - 我不知道!)PHP解析輸入域名的textarea(用空格,逗號,換行符分隔)

我需要解析和識別具有擴展名的個別域名(這將是.com ,其他任何東西都可以忽略)。

用戶的輸入可以爲:

asdf.com

qwer.com

AND/OR

wqer.com,gwew.com

AND/OR

ertert.com gdfgdf.com

沒有人會輸入像www.abczone.com這樣的3級域名,但如果他們這樣做,我只對提取abczone.com部分感興趣。 (我可以有一個單獨的正則表達式來驗證/提取每個)。

回答

1

這將做到這一點:

(\b[a-zA-Z][a-zA-Z0-9-]*)(?=\.com\b) 

「找一個字母后跟字母,數字或連字符的所有序列,隨後.com然後一句話打破。」

(您需要的最後一位,以防止從bim.command.com拿起bim.com。)

的Python測試的情況,因爲我沒有一個PHP測試環境手:

DATA = "asdf.com\nx-123.com, gwew.com bim.command.com 123.com, x_x.com" 
import re 
print re.findall(r'(\b[a-zA-Z][a-zA-Z0-9-]*)(?=\.com\b)', DATA) 
# Prints ['asdf', 'x-123', 'gwew', 'command'] 
+0

幾乎,但是:1)域名不能以數字開頭,2)域名c註釋包含超過63個字符,3)域名不能包含「_」。 – 2009-08-26 12:16:31

+1

@eyze:修正1和3. – RichieHindle 2009-08-26 13:44:03

+0

@RichieHindle:另外,爲什麼.com在非捕獲組內?沒有必要以我的觀點。 – 2009-08-26 14:19:52

0

這,您可以使用i修飾符並刪除所有大寫AZ如果您想要:

\b([a-zA-Z][0-9a-zA-Z\-]{1,62})\.com\b 
+0

不幸的是,這也是「this-domain-name-is-longer-than-63-characters-and-hence-not-valid.com」失敗,返回「域名長度超過63個字符,因此,無效」。 – RichieHindle 2009-08-26 12:27:50

+0

@RichieHindle:我不同意,如果找到一個可以被認爲是有效域的子字符串。這是或者沒有,而你的實現只是返回一個不能存在的域名。 – 2009-08-26 13:06:43

相關問題