Rails 3: проверка IP-строки - PullRequest
       15

Rails 3: проверка IP-строки

29 голосов
/ 21 сентября 2010

В Rails 3 есть встроенный метод для определения, является ли строка действительным IP-адресом?

Если нет, какой самый простой способ проверки?

Ответы [ 7 ]

66 голосов
/ 26 сентября 2012

Просто хотел добавить, что вместо написания собственного шаблона вы можете использовать сборку в одном Resolv::IPv4::Regex

require 'resolv'

validates :gateway, :presence => true, :uniqueness => true,
  :format => { :with => Resolv::IPv4::Regex }
16 голосов
/ 21 сентября 2010

Способ проверки Rails с помощью ActiveRecord в Rails 3:

@ip_regex = /^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}$/

validates :gateway, 
          :presence => true, 
          :uniqueness => true,
          :format => { :with => @ip_regex } 

Хороший ресурс здесь: http://my.rails -royce.org / 2010/07/21 / проверка электронной почты в рублях на рельсах без регулярного выражения /

2 голосов
/ 08 февраля 2017

Вы также можете просто вызвать стандартную библиотеку IPAddr.new, которая будет анализировать подсети , IPV6 и другие интересные вещи: ( IPAddr ) и вернуть nil если формат был неправильным.

Просто сделай:

valid = !(IPAddr.new('192.168.2.0/24') rescue nil).nil?  
#=> true

valid = !(IPAddr.new('192.168.2.256') rescue nil).nil?  
#=> false
1 голос
/ 06 февраля 2015

Вы можете использовать Resolv::IPv4::Regex как Джек, упомянутый ниже, если вам не нужно принимать подсети.

Если вам нужно принять его, activemodel-ipaddr_validator gem может помочь вам.(отказ от ответственности: я автор драгоценного камня)

validates :your_attr, ipaddr: true
0 голосов
/ 14 марта 2015

Вы также можете использовать Regexy :: Web :: IPv4 , который также может сопоставлять IP-адреса с номерами портов.

0 голосов
/ 21 сентября 2010

Вы должны использовать Regular Expression

Вот тот, который делает то, что вы хотите:

/^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.
([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}$/.match("#{@systemIP}")
0 голосов
/ 21 сентября 2010

Я не очень много знаю о RoR, но если вы не найдете встроенного метода для проверки IP-адреса.

Попробуйте это регулярное выражение:

"^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}$"

для проверки IP-адреса.

Я недавно использовал его в одном модуле, поэтому он был на рабочем столе.

...