2010-09-20 13 views
26

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?

+0

Estoy hablando aquí IP4. – Dex

Respuesta

0

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.

0

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}") 
59

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 } 
+0

No estoy seguro de cuándo agregaron esta función, pero esto es mucho más fácil – Dex

+1

Sí, esto es considerablemente más fácil. @Dex ha estado presente desde al menos ruby ​​1.9.2 – WarmWaffles

+0

Puedo confirmar [está en Ruby 1.8.7] (http://ruby-doc.org/stdlib-1.8.7/libdoc/resolv/rdoc/Resolv/IPv4 .html) – dukedave

1

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 
+0

Funciona bien. Tal vez valga la pena agregar la advertencia de que es _tu_jala. – Shadwell

0

También puede utilizar Regexy::Web::IPv4 que pueden coincidir con las direcciones IP con números de puerto también.

2

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 
Cuestiones relacionadas