2010-09-20 24 views
26

In Rails 3, esiste un metodo integrato per verificare se una stringa è un indirizzo IP valido?Rails 3: convalida stringa IP

In caso contrario, qual è il modo più semplice per convalidare?

+0

sto parlando IP4 qui. – Dex

risposta

0

Non so molto su RoR, ma se non si trova alcun metodo integrato per la convalida dell'indirizzo IP.

provare su questa espressione regolare:

"^([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}$" 

per convalidare l'indirizzo IP.

Recentemente l'ho usato in un modulo così ce l'ho avuto sul desktop.

0

È necessario utilizzare un Regular Expression

Qui è uno che fa quello che si vuole:

/^([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

Volevo solo aggiungere che instea d di scrivere il proprio motivo è possibile utilizzare la configurazione in uno Resolv::IPv4::Regex

require 'resolv' 

validates :gateway, :presence => true, :uniqueness => true, 
    :format => { :with => Resolv::IPv4::Regex } 
+0

Non sono sicuro quando hanno aggiunto questa funzione, ma è molto più semplice. – Dex

+1

Sì, questo è molto più semplice. @Dex è stato in circolazione almeno da rubino 1.9.2 – WarmWaffles

+0

Posso confermare [è in Ruby 1.8.7] (http://ruby-doc.org/stdlib-1.8.7/libdoc/resolv/rdoc/Resolv/IPv4 .html) – dukedave

1

È possibile utilizzare Resolv::IPv4::Regex come Jack accennato qui sotto se non è necessario accettare le sottoreti.

Se è necessario accettarlo, activemodel-ipaddr_validator gem potrebbe esserti utile. (Disclaimer: io sono l'autore della gemma)

validates :your_attr, ipaddr: true 
+0

Funziona bene. Forse vale la pena aggiungere il disclaimer che è _your_ gem. – Shadwell

0

È anche possibile utilizzare Regexy::Web::IPv4 che può abbinare gli indirizzi IP con numeri di porta troppo.

2

È anche possibile chiamare la biblioteca di serie IPAddr.new che analizzerà sottoreti, IPV6 e altre cose interessanti: (IPAddr) e restituire nil se il formato è stato sbagliato.

Basta fare:

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

valid = !(IPAddr.new('192.168.2.256') rescue nil).nil? 
#=> false