检查字符串是否仅包含ruby中的数字

时间:2016-09-28 09:27:30

标签: ruby

我有一个字符串作为参数传递给函数。在这里,我想检查字符串是否只包含数字。所以我有一张如下所示的支票:

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

我该如何解决这个问题?

6 个答案:

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

match (String) - APIdock

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

基本上,它确定一个类是否是一个类对象。我刚刚发现了这个,并认为我会分享。