正则表达式以验证ruby中的IPv4地址

时间:2014-04-17 06:29:24

标签: ruby regex

我想在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

4 个答案:

答案 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}