我想在Ruby中验证给定的字符串是否是有效的IPv4地址。我尝试了以下方法,但它会将大于255的值匹配为有效地址。如何限制每个块的范围为0-255。
str="255.255.255.256"
if str=~ /\b[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\b/
puts true
else
puts false
end
我想在Ruby中验证给定的字符串是否是有效的IPv4地址。我尝试了以下方法,但它会将大于255的值匹配为有效地址。如何限制每个块的范围为0-255。
str="255.255.255.256"
if str=~ /\b[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\b/
puts true
else
puts false
end
在Ruby中,你可以使用IPAddr类。无需使用正则表达式进行验证,只需创建一个新对象,并在失败时捕获异常即可:
require 'ipaddr'
ip = IPAddr.new "127.0.0.1"
# => #<IPAddr: IPv4:127.0.0.1/255.255.255.255>
ip = IPAddr.new "127.0.0.a"
# => IPAddr::InvalidAddressError: invalid address
ip.ipv4?
是否返回true
。考虑文档中给出的例子:IPAddr.new "3ffe:505:2::1"
。这并不会引发异常,因为它是一个有效的IPv6地址。 - MatzFanblock = /\d{,2}|1\d{2}|2[0-4]\d|25[0-5]/
re = /\A#{block}\.#{block}\.#{block}\.#{block}\z/
re =~ "255.255.255.255" # => 0
re =~ "255.255.255.256" # => nil
!!
。 - sawa> re =~ ".255.255.255" => 0
它返回了0,但实际上不应该这样。 - user2699706建议使用 Ruby 核心类 IPAddress
。
您可以按照以下方式实现:
require "ipaddress"
IPAddress.valid? "192.128.0.12"
#=> true
IPAddress.valid? "192.128.0.260"
#=> false
您可以在这里查找更多信息:如何检查字符串中的值是否为IP地址
str.count('.')==3 && str.split('.').all? {|s| s[/^\d{3}$/] && s.to_i < 256}