代码之家  ›  专栏  ›  技术社区  ›  Dex

Rails 3:验证IP字符串

  •  27
  • Dex  · 技术社区  · 15 年前

    在Rails3中,是否有一个内置方法来查看字符串是否是有效的IP地址?

    如果不是,最简单的验证方法是什么?

    7 回复  |  直到 9 年前
        1
  •  64
  •   Jack    13 年前

    只是想添加它,而不是编写自己的模式,您可以使用内置模式 Resolv::IPv4::Regex

    require 'resolv'
    
    validates :gateway, :presence => true, :uniqueness => true,
      :format => { :with => Resolv::IPv4::Regex }
    
        2
  •  16
  •   Dex    15 年前

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

    这里有很好的资源: http://my.rails-royce.org/2010/07/21/email-validation-in-ruby-on-rails-without-regexp/

        3
  •  2
  •   Francois    9 年前

    你也可以叫标准图书馆 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
    
        4
  •  1
  •   yuku-t    9 年前

    你可以用 Resolv::IPv4::Regex 正如下面杰克提到的,如果你不需要接受子网。

    如果你需要接受它, activemodel-ipaddr_validator 宝石可以帮助你。(免责声明:我是宝石的作者)

    validates :your_attr, ipaddr: true
    
        5
  •  0
  •   Jsinh    15 年前

    我不太了解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
  •  0
  •   Pedro    15 年前

    你应该使用 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
  •  0
  •   pragma    11 年前

    您也可以使用 Regexy::Web::IPv4 也可以将IP地址与端口号匹配。