我正在使用 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
但它不起作用......
答案 0 :(得分:6)
http://www.ruby-doc.org/stdlib-1.8.7/libdoc/ipaddr/rdoc/IPAddr.html
IPAddr类已经提供了检查它们是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)
}