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?
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?
Les Rails moyen de valider avec ActiveRecord Rails 3 est:
@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 }
Bonne ressource ici: http://my.rails-royce.org/2010/07/21/email-validation-in-ruby-on-rails-without-regexp/
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.
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}")
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 }
Vous ne savez pas quand ils ont ajouté cette fonctionnalité, mais c'est beaucoup plus facile – Dex
Oui, c'est beaucoup plus facile. @Dex il a été autour depuis au moins ruby 1.9.2 – WarmWaffles
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
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
Fonctionne bien. Peut-être vaut la peine d'ajouter l'avertissement que c'est votre joyau. – Shadwell
Vous pouvez également utiliser Regexy::Web::IPv4 qui peut correspondre à des adresses IP avec les numéros de port aussi.
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
Je parle ici IP4. – Dex