我正在传递一系列URL进行验证。功能如下。 当我只传递一个URL但不超过一个URL时,它可以工作。正则表达似乎是正确的。我哪里错了?
def check_urls (list)
regexp =/(^$)|(^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(([0-9]{1,5})?\/.*)?$)/ix
list.each do |url|
if not regexp.match(url)
return false
end
end
return true
end
修正了错误。正则表达式函数没有错,只是拆分错了。
感谢所有抽出时间帮助的人。答案 0 :(得分:2)
尝试检查每个网址,然后将其与正则表达式进行匹配:
def check_urls (list)
regexp =/(^$)|(^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(([0-9]{1,5})?\/.*)?$)/ix
list.all? do |url|
p url # see what URL is getting inspected
regexp =~ url # make sure it matches the regexp
end
end
这可以帮助您找到与其不匹配的网址,您可以在那里工作。
答案 1 :(得分:1)
也许你可以尝试解析uris并在出错时中止。
def check_urls(list = [])
list.to_a.all? do |uri_string|
uri = URI.parse(uri_string) rescue nil
uri && uri.scheme == "http"
end
end
的文档
答案 2 :(得分:0)
结帐Rubular。这是一个很好的小工具,在很多情况下帮助了我。
答案 3 :(得分:0)
user_input.split( “\ r \ n” 个)
看起来这是错误的,这就是为什么函数对一个值而不是一个值正常工作的原因,因为数组总是包含一个字符串,即输入字符串: - (
答案 4 :(得分:0)
此方法可以满足您的要求。
它也可以在String
类中:
def linkify text
text.gsub!(/\b((https?:\/\/|ftps?:\/\/|mailto:|www\.)([A-Za-z0-9\-_=%&@\?\.\/]+))\b/) {
match = $1
tail = $3
case match
when /^www/ then "<a href=\"http://#{match}\">Link</a>"
when /^mailto/ then "<a href=\"#{match}\">Link</a>"
else "<a href=\"#{match}\">Link</a>"
end
}
text
end