ruby-on-rails Rails 3:Rails IP String

zc0qhyus  于 2023-11-20  发布在  Ruby
关注(0)|答案(7)|浏览(115)

在Rails 3中,是否有一个内置的方法来查看字符串是否是有效的IP地址?
如果没有,最简单的验证方法是什么?

voase2hg

voase2hg1#

只是想补充一下,您可以在一个Resolv::AddressRegex中使用构建,而不是编写自己的模式

require 'resolv'

validates :gateway, :presence => true, :uniqueness => true,
  :format => { :with => Resolv::AddressRegex }

字符串
Resolv::AddressRegex匹配IPv4和IPv6地址。如果您只需要一个版本,则可以使用Resolv::IPv4::RegexResolv::IPv6::Regex

4si2a6ki

4si2a6ki2#

在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 }

字符串
好资源:Wayback Archive - Email validation in Ruby On Rails 3 or Active model without regexp

o2gm4chl

o2gm4chl3#

你也可以调用标准库IPAddr.new,它将解析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

字符串

nle07wnf

nle07wnf4#

如果你不需要接受Resolv::IPv4::Regex,你可以像下面提到的Jack那样使用Resolv::IPv4::Regex
如果你需要接受它,activemodel-ipaddr_validator gem可能会帮助你。(免责声明:我是gem的作者)

validates :your_attr, ipaddr: true

字符串

628mspwn

628mspwn5#

我不知道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地址。
我最近在一个模块中使用它,所以在桌面上使用它。

e5nqia27

e5nqia276#

您应该使用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}")

字符串

nfeuvbwi

nfeuvbwi7#

您也可以使用Regexy::Web::IPv4,它也可以匹配IP地址和端口号。

相关问题