in rb/lib/twitter-text/validation.rb [160:177]
def valid_url?(url, unicode_domains=true, require_protocol=true)
return false if !url || url.empty?
url_parts = url.match(Twitter::TwitterText::Regex[:validate_url_unencoded])
return false unless (url_parts && url_parts.to_s == url)
scheme, authority, path, query, fragment = url_parts.captures
return false unless ((!require_protocol ||
(valid_match?(scheme, Twitter::TwitterText::Regex[:validate_url_scheme]) && scheme.match(/\Ahttps?\Z/i))) &&
valid_match?(path, Twitter::TwitterText::Regex[:validate_url_path]) &&
valid_match?(query, Twitter::TwitterText::Regex[:validate_url_query], true) &&
valid_match?(fragment, Twitter::TwitterText::Regex[:validate_url_fragment], true))
return (unicode_domains && valid_match?(authority, Twitter::TwitterText::Regex[:validate_url_unicode_authority])) ||
(!unicode_domains && valid_match?(authority, Twitter::TwitterText::Regex[:validate_url_authority]))
end