【问题标题】:Rails 3: Validate IP StringRails 3:验证 IP 字符串
【发布时间】:2011-04-14 22:42:26
【问题描述】:

在 Rails 3 中,是否有内置方法可以查看字符串是否为有效 IP 地址?

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

【问题讨论】:

    标签: ruby-on-rails regex validation ip-address


    【解决方案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 来解析 subnetsIPV6 和其他很酷的东西:(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地址和端口号。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2023-03-24
              • 1970-01-01
              • 2014-12-13
              • 1970-01-01
              • 2015-08-06
              • 2011-02-21
              • 1970-01-01
              相关资源
              最近更新 更多