"0".to_i == 0
也:
"abcdefg".to_i == 0
我想确保我正在解析的字符串确实只是一个数字(包括0)。
答案 0 :(得分:3)
Integer("0").zero? rescue false
# => true
Integer("1").zero? rescue false
# => false
Integer("abcdefg").zero? rescue false
# => false
答案 1 :(得分:1)
def string_is_integer?(string)
!string.match(/^(\d)+$/).nil? # \d looks for digits
end
def string_is_float?(string)
!string.match(/^(\d)+\.(\d)+$/).nil?
end
def string_is_number?(string)
string_is_integer?(string) || string_is_float?(string)
end
或者,如果你不介意:
def string_is_number?(string)
begin
true if Float(string)
rescue ArgumentError
end || false
end
答案 2 :(得分:1)
def is_zero?(string)
(Integer(string) rescue 1).zero?
end
is_zero? "0" #=> true
is_zero? "00000" #=> true
is_zero? "0cat" #=> false
is_zero? "1" #=> false
is_zero? "-0" #=> true
is_zero? "0_000" #=> true
is_zero? "0x00" #=> true
is_zero? "0b00000000" #=> true
其中一些例子说明了为什么使用Kernel#Integer而不是正则表达式更为可取。
答案 3 :(得分:0)
首先测试字符串是否为整数然后匹配
def is_i?(x)
!!(x =~ /\A[-+]?[0-9]+\z/)
end
def is_zero?(x)
return is_i?(x) && x.to_i == 0
end
# is_zero?("0") will return true
# is_zero?("abcde") will return false
或者您可以将这些方法放在String
类这样的
class String
def is_i?
!!(self =~ /\A[-+]?[0-9]+\z/)
end
def is_zero?
self.is_i? && self.to_i == 0
end
end
"0".is_zero? # true
"abcde".is_zero? # false
答案 4 :(得分:0)
我想确保我解析的字符串确实只是一个数字。
涉及两个步骤:
内置转换函数(如Integer
和Float
)已执行以下两个步骤:如果字符串有效则返回数值结果,否则会引发错误。
仅使用这些函数进行验证并丢弃返回值是浪费。相反,使用返回值并处理异常,例如:
begin
puts 'Enter a number:'
number = Float(gets)
rescue
puts 'Not a valid number'
retry
end
# do something with number
或类似的东西:
def parse_number(string)
Float(string) rescue nil
end
number = parse_number(some_string)
if number
# do something with number
else
# not a number
end