En Rails 3, ¿existe un método integrado para ver si una cadena es una dirección IP válida?Raíles 3: Validar cadena IP
Si no es así, ¿cuál es la forma más fácil de validar?
En Rails 3, ¿existe un método integrado para ver si una cadena es una dirección IP válida?Raíles 3: Validar cadena IP
Si no es así, ¿cuál es la forma más fácil de validar?
Los rieles manera de validar con ActiveRecord en Rails 3 es:
@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 }
Buen recurso aquí: http://my.rails-royce.org/2010/07/21/email-validation-in-ruby-on-rails-without-regexp/
no sé mucho sobre RoR, pero si no encuentra ningún método integrado para la validación de la dirección IP.
probar en esta expresión regular:
"^([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}$"
validar la dirección IP.
Recientemente lo usé en un módulo, así que lo tenía en el escritorio.
Debe utilizar un Regular Expression
aquí es uno que hace lo que quiere:
/^([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}")
Solo quería agregar que instea d de escribir su propio patrón puede utilizar la acumulación en un solo Resolv::IPv4::Regex
require 'resolv'
validates :gateway, :presence => true, :uniqueness => true,
:format => { :with => Resolv::IPv4::Regex }
No estoy seguro de cuándo agregaron esta función, pero esto es mucho más fácil – Dex
Sí, esto es considerablemente más fácil. @Dex ha estado presente desde al menos ruby 1.9.2 – WarmWaffles
Puedo confirmar [está en Ruby 1.8.7] (http://ruby-doc.org/stdlib-1.8.7/libdoc/resolv/rdoc/Resolv/IPv4 .html) – dukedave
Puede utilizar Resolv::IPv4::Regex
como Jack se menciona a continuación si usted no tiene que aceptar subredes.
Si necesita aceptarlo, la gema activemodel-ipaddr_validator puede ayudarlo. (Exención de responsabilidad: yo soy el autor de la gema)
validates :your_attr, ipaddr: true
Funciona bien. Tal vez valga la pena agregar la advertencia de que es _tu_jala. – Shadwell
También puede utilizar Regexy::Web::IPv4 que pueden coincidir con las direcciones IP con números de puerto también.
Usted también puede simplemente llamar a la biblioteca del estándar IPAddr.new
que analizar subredes, IPV6 y otras cosas interesantes: (IPAddr) y volver nil
si el formato era incorrecto.
Just Do:
valid = !(IPAddr.new('192.168.2.0/24') rescue nil).nil?
#=> true
valid = !(IPAddr.new('192.168.2.256') rescue nil).nil?
#=> false
Estoy hablando aquí IP4. – Dex