В Rails 3 есть встроенный метод для просмотра, является ли строка допустимым IP-адресом?
Если нет, то какой самый простой способ проверить?
В Rails 3 есть встроенный метод для просмотра, является ли строка допустимым IP-адресом?
Если нет, то какой самый простой способ проверить?
Способ 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 }
Хороший ресурс здесь: Wayback Archive - проверка электронной почты в Ruby On Rails 3 или активной модели без регулярного выражения
Просто хотел добавить, что вместо написания собственного шаблона вы можете использовать сборку в одном Resolv::IPv4::Regex
require 'resolv'
validates :gateway, :presence => true, :uniqueness => true,
:format => { :with => Resolv::IPv4::Regex }
Вы также можете просто вызвать стандартную библиотеку 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
Вы можете использовать Resolv::IPv4::Regex
как Джек, упомянутый ниже, если вам не нужно принимать подсети.
Если вам нужно его принять, activemodel-ipaddr_validator gem может вам помочь. (отказ от ответственности: я автор драгоценного камня)
validates :your_attr, ipaddr: true
Я не знаю о 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-адреса.
Недавно я использовал его в одном модуле, чтобы он был на рабочем столе.
Вы должны использовать 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}")
Вы также можете использовать Regexy:: Web:: IPv4, который также может соответствовать IP-адресам с номерами портов.