2011-06-02 55 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