2010-09-20 12 views
26

Dans Rails 3, existe-t-il une méthode intégrée permettant de voir si une chaîne est une adresse IP valide?Rails 3: Valider la chaîne IP

Sinon, quel est le moyen le plus simple de valider?

+0

Je parle ici IP4. – Dex

Répondre

0

Je ne connais pas beaucoup RoR, mais si vous ne trouvez pas de méthode intégrée pour la validation de l'adresse IP.

Essayez sur cette expression régulière:

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

pour valider l'adresse IP.

Je l'ai récemment utilisé dans un module et je l'ai donc utilisé sur un ordinateur de bureau.

0

Vous devez utiliser un Regular Expression

Voici celui qui fait ce que vous voulez:

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

Je voulais juste ajouter que instea d d'écrire votre propre modèle, vous pouvez utiliser la construction dans un Jack mentionné ci-dessous Resolv::IPv4::Regex

require 'resolv' 

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

Vous ne savez pas quand ils ont ajouté cette fonctionnalité, mais c'est beaucoup plus facile – Dex

+1

Oui, c'est beaucoup plus facile. @Dex il a été autour depuis au moins ruby ​​1.9.2 – WarmWaffles

+0

Je peux confirmer [c'est dans Ruby 1.8.7] (http://ruby-doc.org/stdlib-1.8.7/libdoc/resolv/rdoc/Resolv/IPv4 .html) – dukedave

1

Vous pouvez utiliser Resolv::IPv4::Regex si vous n'avez pas besoin d'accepter des sous-réseaux.

Si vous avez besoin de l'accepter, activemodel-ipaddr_validator gem peut vous aider. (Disclaimer: je suis l'auteur de la gemme)

validates :your_attr, ipaddr: true 
+0

Fonctionne bien. Peut-être vaut la peine d'ajouter l'avertissement que c'est votre joyau. – Shadwell

0

Vous pouvez également utiliser Regexy::Web::IPv4 qui peut correspondre à des adresses IP avec les numéros de port aussi.

2

Vous pouvez aussi simplement appeler la bibliothèque de normes IPAddr.new qui analysera sous-réseaux, IPV6 et d'autres choses cool: (IPAddr) et retour nil si le format était erroné.

Il suffit de faire:

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

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