一番シンプルなコード
引数ipの値が0から始まったり、文字列の場合はti.to_i.to_s == ti
がうまく働く。
def is_valid_ip(ip)
target_ip = ip.split('.')
target_ip.size == 4 && target_ip.all? {|ti| ti.to_i.to_s == ti && (0..255).include?(ti.to_i)}
end
たまに見るifに条件いっぱいのコード
たまにif文の中で条件を列挙しまくって、最後return true
とかするのを見るがそういうい時は、booleanを判定できるメソッド使った方が戻り値をわざわざ書かないで済むから良いかも
def is_valid_ip(ip)
target_ips = ip.split('.')
return false if target_ips.count != 4
target_ips.each do |ti|
return false if ti.include?(' ') or ti[0] == "0" or ti.to_i > 255 or nil == (ti =~ /\A[0-9]+\z/)
end
return true
end