2010-09-20 61 views
26

在Rails 3中,是否有內置的方法來查看字符串是否是有效的IP地址?Rails 3:驗證IP字符串

如果不是,最簡單的驗證方法是什麼?

+0

我這裏指的IP4。 – Dex 2010-09-20 23:13:46

回答

0

我不知道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地址。

我最近在一個模塊中使用它,所以它在桌面上。

0

您應該使用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}") 
59

只是想添加instea在一個Resolv::IPv4::Regex

require 'resolv' 

validates :gateway, :presence => true, :uniqueness => true, 
    :format => { :with => Resolv::IPv4::Regex } 
+0

不知道他們何時添加了此功能,但這非常容易 – Dex 2012-09-27 01:08:46

+1

是的,這是相當容易的。 @Dex至少在ruby中已經出現1.9.2 – WarmWaffles 2012-10-05 04:43:23

+0

我可以確認[它是在Ruby 1.8.7中](http://ruby-doc.org/stdlib-1.8.7/libdoc/resolv/rdoc/Resolv/IPv4 .html) – dukedave 2012-11-14 16:20:20

1

編寫自己的模式,你可以使用構建d您可以使用Resolv::IPv4::Regex傑克下文提到的,如果你不需要接受子網。

如果您需要接受它,activemodel-ipaddr_validator寶石可能會幫助你。 (免責聲明:我是寶石的作者)

validates :your_attr, ipaddr: true 
+0

運作良好。也許值得加入免責聲明,這是_your_寶石。 – Shadwell 2017-02-17 10:28:35

2

您也可以只調用標準的庫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