回答
那麼,正則表達式將幫助你很長的路,但你可能想考慮只是解析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/)
謝謝,但它實際上不是我需要驗證的完整url,只是用戶選擇的域 – 2011-06-02 21:37:16
如果要走這條路線,我可以建議使用Addressable :: URI,因爲它具有更好地支持RFC規範和國際化。 – 2011-06-02 22:08:16
用於使用已建立的庫進行解析,以及...哦,我無法再次建議使用Addressable :: URI進行+1。 – 2011-06-03 01:05:07
只要前往Regex Lib,並挑選一個你喜歡的(該鏈接已經指向正在查找的正則表達式類型的搜索)。
你想知道用戶是否給你一個有效的名稱作爲一個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!"
爲什麼使用正則表達式匹配?子字符串匹配會同樣有用,而且不那麼麻煩。 !! !! incoming_domain [user.domain]'會給出一個true/false。 – 2011-06-03 01:06:40
我很確定他實際上是在談論文件夾「userdomain」,而不是實際的域名;並且他想確保用戶選擇的文件夾名稱不會在URL中中斷。 – 2011-06-04 00:20:53
這正是我所要求的 – 2011-06-04 09:03:10
您可以使用Rubular來測試你的正則表達式。
- 1. 域驗證的正則表達式
- 2. 用於驗證的正則表達式
- 3. 用於驗證的正則表達式
- 4. Ruby正則表達式驗證?
- 5. 正則表達式域驗證
- 6. 正則表達式,用於驗證PRICE
- 7. 用於域驗證的正則表達式
- 8. Ruby on Rails域名驗證(正則表達式)
- 9. 域驗證的正則表達式驗證器
- 10. 基於Bash的正則表達式域名驗證
- 11. 正則表達式驗證
- 12. 正則表達式驗證
- 13. 正則表達式驗證
- 14. 正則表達式驗證
- 15. 正則表達式驗證
- 16. 正則表達式驗證
- 17. 驗證用正則表達式格式Ruby on Rails的
- 18. C#正則表達式驗證驗證
- 19. 正則表達式驗證的正則表達式
- 20. 用於手機驗證正則表達式表達
- 21. Asp.net正則表達式驗證器 - 驗證表達式
- 22. 需要用於驗證「A1:B2」字符串格式的Ruby正則表達式
- 23. 正則表達式的Ruby驗證器不能正常工作
- 24. ASP.Net正則表達式(%符號)正則表達式驗證器
- 25. 正則表達式不適用於Ruby!
- 26. 使用通配符驗證域的正則表達式
- 27. 使用正則表達式的特定網域網址驗證
- 28. 使用正則表達式Symfony2.0驗證
- 29. 驗證ID用正則表達式
- 30. 驗證使用正則表達式
您的術語有點混亂。你在談論域名,這是mysite.com的一部分;但你也寫了userdomain作爲第一級文件夾 - 這似乎表明你可能在談論有效的url文件夾名稱。這是什麼?你需要單獨驗證「mysite.com」,「mysite.com/userdomain」還是「userdomain」? – 2011-06-02 22:10:09
對於此檢查是真實世界中的任何用途,您最終都想知道該域是否存在。雖然相對容易地看到該域是否在語法上是正確的,但它不會告訴你你真正需要知道的是,它是否可用並且是活着的。而且,最好的辦法就是實現ping或嘗試連接,爲此,您可能需要遵守實際的方案,例如ftp或http。所以,在那時候,使用URI或Addressable :: URI作爲@Bert Goethals的建議可能會更有意義。我更喜歡Addressable :: URI。 – 2011-06-03 01:03:57
我在這裏談論的文件夾名稱 – 2011-06-04 09:02:16