diff options
author | Paulius Dambravičius <dambravicius@gmail.com> | 2015-04-03 12:45:42 +0300 |
---|---|---|
committer | Romain Tartière <romain@blogreen.org> | 2017-09-01 08:33:53 +0200 |
commit | 81e192ecead751f1abe916af8e667a13c282047c (patch) | |
tree | df35c0641f266854220d96a7bd41421af4765264 /lib | |
parent | 9bdfb364e0c670ead7f5f339f944a4d5d43927a2 (diff) | |
download | ipaddress-81e192ecead751f1abe916af8e667a13c282047c.tar.gz |
Add IPv4 subnet validation
Diffstat (limited to 'lib')
-rw-r--r-- | lib/ipaddress.rb | 48 |
1 files changed, 45 insertions, 3 deletions
diff --git a/lib/ipaddress.rb b/lib/ipaddress.rb index 4f8c71f..88d80a2 100644 --- a/lib/ipaddress.rb +++ b/lib/ipaddress.rb @@ -102,21 +102,63 @@ module IPAddress self.kind_of? IPAddress::IPv6 end + + # + # Checks if the given string is either a valid IP, either a valid IPv4 subnet + # + # Example: + # + # IPAddress::valid? "10.0.0.0/24" + # #=> true + # + # IPAddress::valid? "2002::1" + # #=> true + # + # IPAddress::valid? "10.0.0.256" + # #=> false + # + # IPAddress::valid? "10.0.0.0/999" + # #=> false + # + def self.valid?(addr) + valid_ip?(addr) || valid_ipv4_subnet?(addr) + end + # # Checks if the given string is a valid IP address, # either IPv4 or IPv6 # # Example: # - # IPAddress::valid? "2002::1" + # IPAddress::valid_ip? "2002::1" # #=> true # - # IPAddress::valid? "10.0.0.256" + # IPAddress::valid_ip? "10.0.0.256" # #=> false # - def self.valid?(addr) + def self.valid_ip?(addr) valid_ipv4?(addr) || valid_ipv6?(addr) end + + # + # Checks if the given string is a valid IPv4 subnet + # + # Example: + # + # IPAdress::valid_ipv4_subnet? "10.0.0.0/24" + # #=> true + # + # IPAdress::valid_ipv4_subnet? "10.0.0.0/255.255.255.0" + # #=> true + # + # IPAdress::valid_ipv4_subnet? "10.0.0.0/64" + # #=> false + # + def self.valid_ipv4_subnet?(addr) + ip, netmask = addr.split("/") + + valid_ipv4?(ip) && (!(netmask =~ /\A([12]?\d|3[0-2])\z/).nil? || valid_ipv4_netmask?(netmask)) + end # # Checks if the given string is a valid IPv4 address |