@OrdeO
just......newbie

Как проверить корректность ip адресса на руби?

Есть функция которая в виде аргумента получает ip адресс вот такого вида: http://127.34.72.163:82/test
Как можно легко проверить что передав аргумент он является корректным ip адресом?

Погуглив я нашел что есть родная библиотека которая проверяет корректность IP
require "resolv"

"192.168.1.1"   =~ Resolv::IPv4::Regex ? true : false #=> true
"192.168.1.500" =~ Resolv::IPv4::Regex ? true : false #=> false

"ff02::1"    =~ Resolv::IPv6::Regex ? true : false #=> true
"ff02::1::1" =~ Resolv::IPv6::Regex ? true : false #=> false


Но проблема заключается в том, что у меня есть еще http://в начале и /test после ip и при таком аргументе библиотека уже корректно не срабатывает. Возможно можно проверить как-то проще регулярными выражениями, или еще как-то?
Помогите новичку понять, как можно корректно решить эту проблему?
  • Вопрос задан
  • 103 просмотра
Решения вопроса 1
require 'net/http'

def correctIpAddress?(source)
  begin
    url = URI.parse(source)
  rescue URI::InvalidURIError
    return false
  rescue StandardError
    raise
  end

  host = url.host

  begin
    ip = IPAddr.new host
  rescue IPAddr::InvalidAddressError
    return false
  rescue StandardError
    raise
  end

  return true
end

puts correctIpAddress?('https://example.com/foo') # valid url, no ip address
puts correctIpAddress?('foo bar 42 $%$%') # invalid url
puts correctIpAddress?('https://127.0.0.1/foo') # valid url, valid ip address
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Выше приведённый адрес некорректен. Это url поэтому берите библиотеку для проверки url получайте хост, регекспом проверяйте его на условие что каждая часть меньше 256 и уже эту строку скапливайте парсеру ip. Либо сразу делайте регэксп вычленяйте числа разделённые 3 точками и этот результат отдавайте на проверку вашей библиотеке
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы