2010-09-20 11 views
26

Gibt es in Rails 3 eine eingebaute Methode, um festzustellen, ob eine Zeichenfolge eine gültige IP-Adresse ist?Rails 3: IP-String validieren

Wenn nicht, was ist der einfachste Weg zu validieren?

+0

ich IP4 hier rede. – Dex

Antwort

0

Ich weiß nicht viel über RoR, aber wenn Sie keine eingebaute Methode zur Validierung der IP-Adresse finden.

Versuchen Sie, auf diesem regulären Ausdruck:

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

die IP-Adresse zu bestätigen.

Ich habe es vor kurzem in einem Modul verwendet, also hatte es auf dem Desktop.

0

sollten Sie verwenden ein Regular Expression

Hier ist eine, die tut, was Sie wollen:

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

Ich wollte nur hinzufügen, dass insa d Ihrer eigenen Muster schreiben Sie den Build in einem Resolv::IPv4::Regex

require 'resolv' 

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

Nicht sicher, wenn sie diese Funktion hinzugefügt haben, aber das ist so viel einfacher – Dex

+1

Ja das ist wesentlich einfacher. @Dex es ist schon seit mindestens ruby ​​1.9.2 – WarmWaffles

+0

Ich kann bestätigen [es ist in Ruby 1.8.7] (http://ruby-doc.org/stdlib-1.8.7/libdoc/resolv/rdoc/Resolv/IPv4 .html) – dukedave

1

verwenden können, können Sie verwenden Resolv::IPv4::Regex wie Jack unten erwähnt, wenn Sie nicht Subnetze akzeptieren müssen.

Wenn Sie es akzeptieren müssen, kann activemodel-ipaddr_validator Edelstein Ihnen helfen. (Disclaimer: Ich bin der Autor des gem)

validates :your_attr, ipaddr: true 
+0

Funktioniert gut. Vielleicht lohnt es sich, den Disclaimer hinzuzufügen, dass es _ihr_ Juwel ist. – Shadwell

2

Sie können auch anrufen nur Standard-Bibliothek IPAddr.new die Subnetze, IPV6 und andere coole Dinge analysieren wird: (IPAddr) und zurück nil, wenn das Format nicht in Ordnung ist.

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