Является ли Ruby URI.regexp «неправильным» для использования в качестве валидатора?

Учитывая URL-адрес, напримерhttps://example.com/<network_id>/1

Модуль Ruby URI может проверять URI с помощью регулярного выражения:

      URI.regexp.match("https://example.com/<network_id>/1")
=> #<MatchData "https://example.com/" 1:"https" 2:nil 3:nil 4:"example.com" 5:nil 6:nil 7:"/" 8:nil 9:nil>

Но если вы попытаетесь передать это другому пакету, скажем, класс URI Java

Это не удастся:

      Error message:
Illegal character in path at index ...

                               java.net.URI.create(URI.java:852)
org.apache.http.client.methods.HttpPost.<init>(HttpPost.java:73)
...

Есть ли лучший валидатор URI, который мы можем использовать в классе Rails?

1 ответ

я хотел бы использоватьURI.parseдля проверки URL.URL.parseвызывает исключение, если URL-адрес недействителен:

      require 'uri'

URI.parse('https://example.com/<network_id>/1')
#=> bad URI(is not URI?): "https://example.com/<network_id>/1" (URI::InvalidURIError)                                       

Что позволяет написать простой метод проверки URL, например:

      def valid_url?(url)
  URI.parse(url) rescue false
end

valid_url?('https://example.com/<network_id>/1')
#=> false

valid_url?('https://stackoverflow.com/questions/75179882')
#=> #<URI::HTTPS https://stackoverflow.com/questions/75179882>
Другие вопросы по тегам