有一個表單域,其中用戶應該以「google.com」的形式輸入域名。如何從雜亂的用戶輸入中匹配/提取域名?
然而,考慮到用戶的困惑,我希望能夠清潔輸入的「google.com」的確切形式的情況下,他們在下列情況下鍵入:
http://www.google.com
http://google.com
google.com/blah
www.google.com
..and other incorrect forms
什麼最好的方法來完成這個?
在此先感謝!
有一個表單域,其中用戶應該以「google.com」的形式輸入域名。如何從雜亂的用戶輸入中匹配/提取域名?
然而,考慮到用戶的困惑,我希望能夠清潔輸入的「google.com」的確切形式的情況下,他們在下列情況下鍵入:
http://www.google.com
http://google.com
google.com/blah
www.google.com
..and other incorrect forms
什麼最好的方法來完成這個?
在此先感謝!
您可以編寫簡單的函數,用正則表達式清理這些了:
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
這很難。您不僅需要解析許多不同形式的URI,還需要知道如何使用諸如Public Suffix List之類的東西來獲取主機名中的TLD,就像Firefox一樣。
你應該建立自己的系統在addressable/uri,這種寶石會照顧的URI的東西(路徑,主機,端口),你只需要提供默認方案是http
。 ()。
例
>> 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不會猜到它。而且完成了,無需手動處理。
這是一個非常有趣和靈活的解決方案。謝謝。 – jimsung