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?
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?
The Rails modo per convalidare con ActiveRecord in 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 }
buona risorsa qui: http://my.rails-royce.org/2010/07/21/email-validation-in-ruby-on-rails-without-regexp/
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.
È 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}")
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 }
Non sono sicuro quando hanno aggiunto questa funzione, ma è molto più semplice. – Dex
Sì, questo è molto più semplice. @Dex è stato in circolazione almeno da rubino 1.9.2 – WarmWaffles
Posso confermare [è in Ruby 1.8.7] (http://ruby-doc.org/stdlib-1.8.7/libdoc/resolv/rdoc/Resolv/IPv4 .html) – dukedave
È 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
Funziona bene. Forse vale la pena aggiungere il disclaimer che è _your_ gem. – Shadwell
È anche possibile utilizzare Regexy::Web::IPv4 che può abbinare gli indirizzi IP con numeri di porta troppo.
È 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
sto parlando IP4 qui. – Dex