简体   繁体   English

IP地址格式检查

[英]IP address format check

I am developing a Ruby on Rails application by using Ruby v1.8.7 .我正在使用Ruby v1.8.7开发Ruby on Rails应用程序。 My question is more about Ruby language.我的问题更多是关于Ruby语言。

I know there is a build-in Ruby library named IPAddr in Ruby v1.8.7 .我知道有一个内置的Ruby库命名IPADDRRubyv1.8.7。 It handles IP address related issues well.它可以很好地处理 IP 地址相关问题。 But, seems it does not provide any method to check IP address format.但是,它似乎没有提供任何检查 IP 地址格式的方法。

Could someone provide me a good way to check IP address format (IPv4 and IPv6 addresses) in Ruby?有人可以为我提供一种在 Ruby 中检查 IP 地址格式(IPv4 和 IPv6 地址)的好方法吗? Thank you.谢谢你。

PS聚苯乙烯

I tried a regular expression way:我尝试了一种正则表达式方式:

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

But it does not work...但它不起作用......

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

The IPAddr class already provides methods to check whether they're IPV4 or IPV6 formats: IPAddr 类已经提供了检查它们是 IPV4 还是 IPV6 格式的方法:

  • #ipv4? #ipv4?
  • #ipv6? #ipv6?

ActiveValidators has an IP validator. ActiveValidators有一个 IP 验证器。
It uses a regex for any ipv4, and Resolv::IPv6::Regex for any ipv6 address.它对任何 ipv4 使用正则Resolv::IPv6::Regex对任何 ipv6 地址使用Resolv::IPv6::Regex

To use it, it's very simple.要使用它,它非常简单。
Add activevalidators to your Gemfile.将 activevalidators 添加到您的 Gemfile。

gem 'activevalidators'

Then, in your Computer class :然后,在您的计算机类中:

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

Looks like your regular expression is wrong.看起来你的正则表达式是错误的。 It should be:它应该是:

/^([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])$/
validates :ip,
      :format => {
        :with => Regexp.union(Resolv::IPv4::Regex, Resolv::IPv6::Regex)
      }

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM