我有一个字符串作为参数传递给函数。在这里,我想检查字符串是否只包含数字。所以我有一张如下所示的支票:
def check_string(string)
result = false
if string.to_i.to_s.eql? string
result = true
end
result
end
但是当字符串以0开头时出现问题。在这种情况下,返回false。
check_string('123') #=> true
check_string('0123') #=> false
我该如何解决这个问题?
答案 0 :(得分:25)
您可以尝试以下
def check_string(string)
string.scan(/\D/).empty?
end
如果字符串只包含数字或者它是一个空字符串,那将会很简单。否则返回false。
答案 1 :(得分:2)
def check_string(str)
str !~ /\D/
end
check_string '123'
#=> true
check_string ''
#=> true
check_string '1a2'
#=> false
另一种方式:
def check_string(str)
return true if str.empty?
str.to_i.to_s == str
end
check_string '123'
#=> true
check_string ''
#=> true
check_string '1a2'
#=> false
答案 2 :(得分:2)
这是我检测它是否是浮点数的提议
def check(string)
scan = string.scan(/\D/)
scan.size == 0 || (scan.size == 1 && scan.first == ".") # or "," depend on your separator
end
使用示例:
check("123") => true
check("12.3") => true
check("12e3") => false
check("12.3.2") => false
答案 3 :(得分:1)
您可以使用Regexp:
def check_string(string)
raise 'Empty string passed' if string.empty?
/\A\d+\z/ === string
end
check_string '123'
#=> true
check_string '0123'
#=> true
check_string '0'
#=> true
答案 4 :(得分:1)
我们还可以使用“匹配”功能来做到这一点。
"1234".match(/\D/)
#=> nil
"1234foo".match(/\D/)
#=> #<MatchData "f">
答案 5 :(得分:-3)
如果有人正在寻找另一种确定字符串是否为数字的方法->将使用“ is_a?Numeric”。 Is_a? reference documentation
"namaste".is_a? Numeric
=> false
6.is_a? Numeric
=> true
str1 = "foo"
str2 = 9
str1.is_a? Numeric
=> false
str2.is_a? Numeric
=> true
您还可以使用:
7.is_a?(Numeric)
=> true
"too".is_a?(Numeric)
=> false
基本上,它确定一个类是否是一个类对象。我刚刚发现了这个,并认为我会分享。