diff --git a/lib/geocoder/ip_address.rb b/lib/geocoder/ip_address.rb index 2704cdfa88e2468745fbc7bc28460dded31ec2d2..9174f8d3a781ca40f3a6f01572bb4843b754791e 100644 --- a/lib/geocoder/ip_address.rb +++ b/lib/geocoder/ip_address.rb @@ -1,3 +1,4 @@ +require 'resolv' module Geocoder class IpAddress < String @@ -6,16 +7,7 @@ module Geocoder end def valid? - ipregex = %r{ - \A( # String Starts - ((::ffff:)?((\d{1,3})\.){3}\d{1,3}) # Check for IPv4 - | # .... Or - (\S+?(:\S+?){6}\S+) # Check for IPv6 - | # .... Or - (::1) # IPv6 loopback - )\z - }x - !!self.match(ipregex) + !!((self =~ Resolv::IPv4::Regex) || (self =~ Resolv::IPv6::Regex)) end end end diff --git a/test/unit/ip_address_test.rb b/test/unit/ip_address_test.rb index f2a9366e6a5a6d752d1eb5daec02fd0b7e80d3d6..3eb75638af7a89bb0c3bd093ed784ab0283676b8 100644 --- a/test/unit/ip_address_test.rb +++ b/test/unit/ip_address_test.rb @@ -6,7 +6,7 @@ class IpAddressTest < GeocoderTestCase def test_valid assert Geocoder::IpAddress.new("232.65.123.94").valid? - assert Geocoder::IpAddress.new("666.65.123.94").valid? # technically invalid + assert !Geocoder::IpAddress.new("666.65.123.94").valid? assert Geocoder::IpAddress.new("::ffff:12.34.56.78").valid? assert Geocoder::IpAddress.new("3ffe:0b00:0000:0000:0001:0000:0000:000a").valid? assert Geocoder::IpAddress.new("::1").valid?