回答
那么,正则表达式将帮助你很长的路,但你可能想考虑只是解析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. 正则表达式,用于验证PRICE
- 5. Ruby on Rails域名验证(正则表达式)
- 6. 基于Bash的正则表达式域名验证
- 7. 正则表达式验证
- 8. 正则表达式验证
- 9. 正则表达式验证
- 10. 正则表达式验证
- 11. C#正则表达式验证验证
- 12. 正则表达式验证的正则表达式
- 13. 正则表达式的Ruby验证器不能正常工作
- 14. ASP.Net正则表达式(%符号)正则表达式验证器
- 15. 正则表达式不适用于Ruby!
- 16. 使用正则表达式的特定网域网址验证
- 17. 验证URL使用正则表达式
- 18. 验证使用正则表达式
- 19. Laravel - 验证使用正则表达式
- 20. 验证用正则表达式在JavaScript
- 21. 验证ID用正则表达式
- 22. 使用Java验证正则表达式
- 23. 验证使用正则表达式
- 24. 验证使用正则表达式
- 25. 用于数字格式验证的正则表达式
- 26. 用于表单验证的正则表达式
- 27. 验证的正则表达式的
- 28. 正则表达式验证XML模式
- 29. 正则表达式验证格式(ABC_123)
- 30. 用于临床试验领域的Python正则表达式
您的术语有点混乱。你在谈论域名,这是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