IP地址格式检查

问题描述 投票:1回答:4

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

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

有人可以给我一种检查IP地址格式的好方法(Ruby中的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

但是它不起作用...

ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1
4个回答
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])$/

6
投票

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

IPAddr类已经提供了检查其是否为IPV4或IPV6格式的方法:

  • #ipv4?
  • #ipv6?

3
投票

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

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

gem 'activevalidators'

然后,在您的计算机课程中:

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.