Rails 3:验证 IP 字符串
Posted
技术标签:
【中文标题】Rails 3:验证 IP 字符串【英文标题】:Rails 3: Validate IP String 【发布时间】:2011-04-14 22:42:26 【问题描述】:在 Rails 3 中,是否有内置方法可以查看字符串是否为有效 IP 地址?
如果没有,最简单的验证方法是什么?
【问题讨论】:
【参考方案1】:只是想补充一点,您可以在一个 Resolv::IPv4::Regex
中使用构建而不是编写自己的模式
require 'resolv'
validates :gateway, :presence => true, :uniqueness => true,
:format => :with => Resolv::IPv4::Regex
【讨论】:
不确定他们何时添加了此功能,但这要容易得多 是的,这要容易得多。 @Dex 至少从 ruby 1.9.2 开始就存在了 我可以确认it's in Ruby 1.8.7 这是一个非常好的和干净的解决方案。适用于 Ruby 1.9.3 和 Rails 3.2 只是想在这里注意,还有Resolv::AddressRegex
表达式,它允许 IPv4 和 IPv6 地址。【参考方案2】:
在 Rails 3 中使用 ActiveRecord 进行验证的 Rails 方法是:
@ip_regex = /^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]))3$/
validates :gateway,
:presence => true,
:uniqueness => true,
:format => :with => @ip_regex
这里有很好的资源:@987654321@
【讨论】:
【参考方案3】:您也可以调用标准库 IPAddr.new
来解析 subnets、IPV6 和其他很酷的东西:(IPAddr) 并返回 nil
,如果格式错误。
只要做:
valid = !(IPAddr.new('192.168.2.0/24') rescue nil).nil?
#=> true
valid = !(IPAddr.new('192.168.2.256') rescue nil).nil?
#=> false
【讨论】:
【参考方案4】:如果您不需要接受子网,您可以使用下面提到的 Jack 的 Resolv::IPv4::Regex
。
如果你需要接受它,activemodel-ipaddr_validatorgem 可以帮助你。 (免责声明:我是 gem 的作者)
validates :your_attr, ipaddr: true
【讨论】:
效果很好。也许值得添加它是 your gem 的免责声明。【参考方案5】:我不太了解 RoR,但如果您没有找到任何用于验证 IP 地址的内置方法。
试试这个正则表达式:
"^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]))3$"
验证 IP 地址。
我最近在一个模块中使用它,所以在桌面上使用它。
【讨论】:
【参考方案6】:你应该使用Regular Expression
这是你想要的:
/^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.
([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]))3$/.match("#@systemIP")
【讨论】:
【参考方案7】:你也可以使用Regexy::Web::IPv4,它也可以匹配ip地址和端口号。
【讨论】:
以上是关于Rails 3:验证 IP 字符串的主要内容,如果未能解决你的问题,请参考以下文章
是否可以在 Rails 模型验证方法中执行一些 Javascript?