我想在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
答案 0 :(得分:12)
你在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
答案 1 :(得分:7)
您最好使用ruby核心类IPAddress
require "ipaddress"
IPAddress.valid? "192.128.0.12"
#=> true
IPAddress.valid? "192.128.0.260"
#=> false
你可以在这里找到更多How do I check whether a value in a string is an IP address
答案 2 :(得分:5)
block = /\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
答案 3 :(得分:1)
这是一种非常容易理解的方式:
str.count('.')==3 && str.split('.').all? {|s| s[/^\d{3}$/] && s.to_i < 256}