【问题标题】:IP address format checkIP地址格式检查
【发布时间】:2011-12-16 09:30:52
【问题描述】:

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

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

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

附言

我尝试了正则表达式的方式:

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

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

【问题讨论】:

  • 你需要修复你的正则表达式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])$/
  • @taro,你可以回答问题而不是评论,以便我接受你的回答

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


【解决方案1】:

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

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

  • #ipv4?
  • #ipv6?

【讨论】:

  • 我推荐这种方法,它同时支持IP4和IP6类型的地址,以后不会对你造成影响。
  • ActiveValidators,正如 Damien 所提到的,依赖于 IPAddr,因此这取决于您是否要为此使用 gem(它会进行大量其他验证)。
  • 这里要记住的是,这些方法仅适用于 IPAddr 类的实例。因此,如果提供了诸如“300.300.300.300”之类的非 IP 值,那么在使用这些方法之前,您最终会遇到参数错误。
【解决方案2】:

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

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

gem 'activevalidators'

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

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

【讨论】:

  • 如果我有一台模型类计算机
  • 嗨,我正在开发一个 Rails v2.3.2 应用程序。似乎 activevalidators 只支持 Rails v3 ...因为我添加了 gem 并运行 bundle install,它抱怨我的 activerecord 版本
  • 嗯,是的,它只是 rails3。您仍然可以获得正则表达式并在您的 rails2 应用程序中使用它。或者(甚至更好),升级!
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:
    validates :ip,
          :format => {
            :with => Regexp.union(Resolv::IPv4::Regex, Resolv::IPv6::Regex)
          }
    

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

    【讨论】:

      猜你喜欢
      • 2012-08-03
      • 1970-01-01
      • 2013-07-29
      • 1970-01-01
      • 2013-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多