IP地址格式检查

时间:2011-12-16 09:30:52

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1

我正在使用 Ruby v1.8.7 开发 Ruby on Rails 应用程序。我的问题更多是关于 Ruby 语言。

我知道 Ruby v1.8.7 中有一个名为IPAddr的内置Ruby库。它很好地处理与IP地址相关的问题。但是,似乎它没有提供任何检查IP地址格式的方法。

有人可以在Ruby中为我提供检查IP地址格式(IPv4和IPv6地址)的好方法吗?谢谢。

P.S。

我尝试了正则表达方式:

ip_regex = ^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.
([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])$

ip_addr='127.0.0.3'
ip_addr =~ ip_regex

但它不起作用......

4 个答案:

答案 0 :(得分:6)

http://www.ruby-doc.org/stdlib-1.8.7/libdoc/ipaddr/rdoc/IPAddr.html

IPAddr类已经提供了检查它们是IPV4还是IPV6格式的方法:

  • #的IPv4?
  • #的IPv6?

答案 1 :(得分:3)

ActiveValidators有一个IP验证器 它对任何ipv4使用正则表达式,对任何ipv6地址使用Resolv::IPv6::Regex

使用它,非常简单 将activevalidators添加到您的Gemfile中。

gem 'activevalidators'

然后,在您的计算机课上:

class Computer << ActiveRecord::Base
  validates :remote_address,
    :ip => { :format => :v4 }
end

答案 2 :(得分:1)

看起来你的正则表达式是错误的。 它应该是:

/^([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])$/

答案 3 :(得分:0)

validates :ip,
      :format => {
        :with => Regexp.union(Resolv::IPv4::Regex, Resolv::IPv6::Regex)
      }

来自https://stackoverflow.com/a/15157862/378006