如何检查字符串是否是有效的URL?
例如:
http://hello.it => yes
http:||bra.ziz, => no
Run Code Online (Sandbox Code Playgroud)
如果这是一个有效的URL,我如何检查这是否与图像文件相关?
Mik*_*l S 172
使用URI随Ruby分发的模块:
require 'uri'
if url =~ URI::regexp
# Correct URL
end
Run Code Online (Sandbox Code Playgroud)
就像AlexanderGünther在评论中所说,它检查一个字符串是否包含一个URL.
要检查字符串是否为URL,请使用:
url =~ /\A#{URI::regexp}\z/
Run Code Online (Sandbox Code Playgroud)
如果您只想检查Web URL(http或https),请使用以下命令:
url =~ /\A#{URI::regexp(['http', 'https'])}\z/
Run Code Online (Sandbox Code Playgroud)
小智 42
与上面的答案类似,我发现使用此正则表达式稍微更准确:
URI::DEFAULT_PARSER.regexp[:ABS_URI]
Run Code Online (Sandbox Code Playgroud)
这将使带空格的URL无效,而不是URI.regexp由于某种原因允许空格.
我最近发现了为不同的URI rgexps提供的快捷方式.您可以URI::DEFAULT_PARSER.regexp.keys直接访问任何一个URI::#{key}.
例如,:ABS_URI可以从中访问正则表达式URI::ABS_URI.
fot*_*nus 32
当前答案的问题是URI不是URL.
URI可以进一步分类为定位符,名称或两者.术语"统一资源定位符"(URL)指的是URI的子集,其除了标识资源之外,还通过描述其主要访问机制(例如,其网络"位置")来提供定位资源的手段.
由于URL是URI的子集,因此很明显,专门针对URI的匹配将成功匹配不需要的值.例如,URN:
"urn:isbn:0451450523" =~ URI::regexp
=> 0
Run Code Online (Sandbox Code Playgroud)
话虽如此,据我所知,Ruby没有默认的方法来解析URL,所以你很可能需要一个gem才能这样做.如果您需要专门以HTTP或HTTPS格式匹配URL,您可以执行以下操作:
uri = URI.parse(my_possible_url)
if uri.kind_of?(URI::HTTP) or uri.kind_of?(URI::HTTPS)
# do your stuff
end
Run Code Online (Sandbox Code Playgroud)
Dav*_* J. 19
我更喜欢Addressable gem.我发现它更智能地处理URL.
require 'addressable/uri'
SCHEMES = %w(http https)
def valid_url?(url)
parsed = Addressable::URI.parse(url) or return false
SCHEMES.include?(parsed.scheme)
rescue Addressable::URI::InvalidURIError
false
end
Run Code Online (Sandbox Code Playgroud)
Wil*_*och 10
这是一个相当古老的条目,但我想我会继续前进并做出贡献:
String.class_eval do
def is_valid_url?
uri = URI.parse self
uri.kind_of? URI::HTTP
rescue URI::InvalidURIError
false
end
end
Run Code Online (Sandbox Code Playgroud)
现在你可以这样做:
if "http://www.omg.wtf".is_valid_url?
p "huzzah!"
end
Run Code Online (Sandbox Code Playgroud)
对我来说,我使用这个正则表达式:
/^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/ix
Run Code Online (Sandbox Code Playgroud)
选项:
i - 不区分大小写x - 忽略正则表达式中的空格您可以设置此方法来检查URL验证:
def valid_url?(url)
url_regexp = /^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/ix
url =~ url_regexp ? true : false
end
Run Code Online (Sandbox Code Playgroud)
要使用它:
valid_url?("http://stackoverflow.com/questions/1805761/check-if-url-is-valid-ruby")
Run Code Online (Sandbox Code Playgroud)
使用错误的网址测试:
http://ruby3arabi - 结果无效http://http://ruby3arabi.com - 结果无效http:// - 结果无效使用正确的网址测试:
http://ruby3arabi.com - 结果有效http://www.ruby3arabi.com - 结果有效https://www.ruby3arabi.com - 结果有效https://www.ruby3arabi.com/article/1 - 结果有效https://www.ruby3arabi.com/websites/58e212ff6d275e4bf9000000?locale=en - 结果有效