首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么验证IP给我的Rails无效?

为什么验证IP给我的Rails无效?
EN

Stack Overflow用户
提问于 2013-08-29 02:02:17
回答 2查看 2K关注 0票数 0

这是我的模型:

代码语言:javascript
运行
复制
require 'resolv'
class Profile < ActiveRecord::Base

  @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 :ip, :dns, :ntp, :format => { :with => @ip_regex } 
  validates_format_of :ip, :dns, :ntp, :with => Resolv::IPv4::Regex

end

正如你所看到的,我正在尝试两种方法,这两种方法都给了我:

代码语言:javascript
运行
复制
xxx is invalid

对于输入,我只是尝试:192.168.1.1

我使用的是Ruby1.8.7和Rails 3.0.3。

知道我做错了什么吗?谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-29 03:45:45

IPv6将变得越来越流行,因为IPv4空间已经耗尽。与其依赖IPv4 regex,不如使用IPAddr并依靠经过良好测试的轮子来告诉您它是否是有效的IP,而不管它是IPv4还是v6。

IPAddr将提出:

代码语言:javascript
运行
复制
IPAddr::InvalidAddressError: invalid address

例如:

代码语言:javascript
运行
复制
require 'ipaddr'
IPAddr.new('292.168.1.1')

如果它是一个有效的v4或v6,它就会通过。

关于Rails拒绝IP号的原因:您有两个单独的验证,但是您没有显示是哪一个导致了您看到的错误。基本调试要求注释掉一个,并查看问题是消失了还是继续发生。一旦你这样做了,你可以深入挖掘,以找出问题。实际上,您没有给我们任何关于Rails抱怨的信息。

票数 1
EN

Stack Overflow用户

发布于 2013-08-29 02:19:25

validates_format_of只是validates的一个变体。它需要一个实际的正则表达式,就像您在validates调用中提供的那样。因为您只是提供Regex类,所以我怀疑它是在取消本来有效的validates调用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18501179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档