2011-06-02 16 views
0

我正在尋找一個正則表達式來驗證我的用戶選擇的域I.E. http://mysite.com/userdomain用於域驗證的Ruby正則表達式

我所關心的是它允許正確的字符。

+1

您的術語有點混亂。你在談論域名,這是mysite.com的一部分;但你也寫了userdomain作爲第一級文件夾 - 這似乎表明你可能在談論有效的url文件夾名稱。這是什麼?你需要單獨驗證「mysite.com」,「mysite.com/userdomain」還是「userdomain」? – 2011-06-02 22:10:09

+0

對於此檢查是真實世界中的任何用途,您最終都想知道該域是否存在。雖然相對容易地看到該域是否在語法上是正確的,但它不會告訴你你真正需要知道的是,它是否可用並且是活着的。而且,最好的辦法就是實現ping或嘗試連接,爲此,您可能需要遵守實際的方案,例如ftp或http。所以,在那時候,使用URI或Addressable :: URI作爲@Bert Goethals的建議可能會更有意義。我更喜歡Addressable :: URI。 – 2011-06-03 01:03:57

+0

我在這裏談論的文件夾名稱 – 2011-06-04 09:02:16

回答

5

那麼,正則表達式將幫助你很長的路,但你可能想考慮只是解析URL。

def validate_url(url) 
    uri = URI.parse(url) 
    uri.class != URI::HTTP 
rescue URI::InvalidURIError 
    false 
end 

或者尋址:: URI可以用來代替URI(由建議@ ABE-沃爾克)

(來源:http://actsasblog.wordpress.com/2006/10/16/url-validation-in-rubyrails/

+0

謝謝,但它實際上不是我需要驗證的完整url,只是用戶選擇的域 – 2011-06-02 21:37:16

+0

如果要走這條路線,我可以建議使用Addressable :: URI,因爲它具有更好地支持RFC規範和國際化。 – 2011-06-02 22:08:16

+0

用於使用已建立的庫進行解析,以及...哦,我無法再次建議使用Addressable :: URI進行+1。 – 2011-06-03 01:05:07

0

只要前往Regex Lib,並挑選一個你喜歡的(該鏈接已經指向正在查找的正則表達式類型的搜索)。

0

你想知道用戶是否給你一個有效的名稱作爲一個url中的文件夾? (你需要爲CGI.escape(some_folder_name) != some_folder_name可能會得到你。)


或者,你在找Regexp.new(Regexp.escape(some_url_string))

生成一個匹配some_url_string的任何實例的正則表達式。

使用像這樣:

user.domain = "http://mysite.com/userdomain" # or "mysite.com/userdomain" 
incoming_domain = "http://mysite.com/userdomain/a_post" 
users_domain_regexp = Regexp.new(Regexp.escape(user.domain)) 
if incoming_domain =~ users_domain_regexp 
    puts "By George, we've done it!" 
else 
    puts "I'm sorry, but we're prejudiced against that url" 
end 
#=> "By George, we've done it!" 
+0

爲什麼使用正則表達式匹配?子字符串匹配會同樣有用,而且不那麼麻煩。 !! !! incoming_domain [user.domain]'會給出一個true/false。 – 2011-06-03 01:06:40

+0

我很確定他實際上是在談論文件夾「userdomain」,而不是實際的域名;並且他想確保用戶選擇的文件夾名稱不會在URL中中斷。 – 2011-06-04 00:20:53

+0

這正是我所要求的 – 2011-06-04 09:03:10