有一个表单字段,用户应以“google.com”的形式输入域名。
然而,考虑到困惑的用户,我希望能够在输入“google.com”的确切形式时将其清除,以防他们输入以下情况:
http://www.google.com
http://google.com
google.com/blah
www.google.com
..and other incorrect forms
实现这一目标的最佳方法是什么?
提前致谢!
答案 0 :(得分:6)
你应该在addressable/uri上构建你的系统,这个gem会处理URI的东西(路径,主机,端口),你只需要提供http
的默认方案。
(gem install addressable
)。
示例
>> uri = Addressable::URI.parse("http://google.com?q=lolcat")
=> #<Addressable::URI:0x80bcf0e0 URI:http://google.com?q=lolcat>
>> [uri.host,uri.path,uri.scheme]
=> ["google.com", "", "http"]
基本上你只需要检测http://是否存在并添加它(如果不是这种情况),因为URI不会为你猜测它。它完成了,没有更多的手动处理。
答案 1 :(得分:4)
您可以使用正则表达式编写简单的函数来清除它们:
def foo(s)
s.gsub(/^(http:\/\/)?(www\.)?/,'').gsub(/\/.*$/,'')
end
这适用于您提供的所有示例。如果这还不够,请添加更多测试用例:
def test_foo
assert_equal 'google.com', foo('http://www.google.com')
assert_equal 'google.com', foo('http://google.com')
assert_equal 'google.com', foo('google.com/blah')
assert_equal 'google.com', foo('www.google.com')
end
答案 2 :(得分:0)
这很难。您不仅需要解析许多不同形式的URI,而且还需要知道如何使用诸如Public Suffix List之类的内容从主机名获取TLD,就像Firefox一样。