这是我的模型:
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
正如你所看到的,我正在尝试两种方法,这两种方法都给了我:
xxx is invalid
对于输入,我只是尝试:192.168.1.1
。
我使用的是Ruby1.8.7和Rails 3.0.3。
知道我做错了什么吗?谢谢!
发布于 2013-08-29 03:45:45
IPv6将变得越来越流行,因为IPv4空间已经耗尽。与其依赖IPv4 regex,不如使用IPAddr并依靠经过良好测试的轮子来告诉您它是否是有效的IP,而不管它是IPv4还是v6。
IPAddr将提出:
IPAddr::InvalidAddressError: invalid address
例如:
require 'ipaddr'
IPAddr.new('292.168.1.1')
如果它是一个有效的v4或v6,它就会通过。
关于Rails拒绝IP号的原因:您有两个单独的验证,但是您没有显示是哪一个导致了您看到的错误。基本调试要求注释掉一个,并查看问题是消失了还是继续发生。一旦你这样做了,你可以深入挖掘,以找出问题。实际上,您没有给我们任何关于Rails抱怨的信息。
发布于 2013-08-29 02:19:25
validates_format_of
只是validates
的一个变体。它需要一个实际的正则表达式,就像您在validates
调用中提供的那样。因为您只是提供Regex
类,所以我怀疑它是在取消本来有效的validates
调用。
https://stackoverflow.com/questions/18501179
复制相似问题