Reputation: 12749
In Rails 3, is there a built in method for seeing if a string is a valid IP address?
If not, what is the easiest way to validate?
Upvotes: 38
Views: 13461
Reputation: 1451
Just wanted to add that instead of writing your own pattern you can use the build in one Resolv::AddressRegex
require 'resolv'
validates :gateway, :presence => true, :uniqueness => true,
:format => { :with => Resolv::AddressRegex }
Resolv::AddressRegex
matches both IPv4 and IPv6 addresses. If you need only one version you can use Resolv::IPv4::Regex
or Resolv::IPv6::Regex
.
Upvotes: 72
Reputation: 12749
The Rails way to validate with ActiveRecord in Rails 3 is:
@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 }
Good resource here: Wayback Archive - Email validation in Ruby On Rails 3 or Active model without regexp
Upvotes: 17
Reputation: 29
You can use Resolv::IPv4::Regex
as Jack mentioned below if you don't need to accept subnets.
If you need to accept it, activemodel-ipaddr_validator gem may help you. (disclaimer: I'm the author of the gem)
validates :your_attr, ipaddr: true
Upvotes: 2
Reputation: 1510
You can also just call standard's library IPAddr.new
that will parse subnets, IPV6 and other cool things: (IPAddr) and return nil
if the format was wrong.
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
Upvotes: 4
Reputation: 1400
You can also use Regexy::Web::IPv4 which can match ip addresses with port numbers too.
Upvotes: 0
Reputation: 11864
You should use a Regular Expression
Here is one that does what you want:
/^([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}")
Upvotes: 0
Reputation: 2579
i dont know about RoR a lot, but if you dont find any built in method for validation of IP Address.
Try on this regular expression :
"^([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}$"
to validate the IP Address.
I recently used it in one module so had it on desktop.
Upvotes: 0