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

Pal*_*ary 9 ruby

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

def check_string(string)
  result = false
  if string.to_i.to_s.eql? string
    result =  true
  end
  result
end
Run Code Online (Sandbox Code Playgroud)

但是当字符串以0开头时出现问题.在这种情况下,返回false.

check_string('123')  #=> true
check_string('0123') #=> false
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

Ale*_*sey 27

您可以尝试以下方法

def check_string(string)
  string.scan(/\D/).empty?
end
Run Code Online (Sandbox Code Playgroud)

如果字符串只包含数字,那将是真实的.

  • 这很聪明.您也可以使用您的答案的变体和@Stefan的建议`string.scan(/ ^\d + $ /).任何?`我觉得它很好看. (2认同)

Zac*_* Xu 6

数字可以是负数,也可以是浮点数。因此,如果允许,请考虑以下解决方案:

def is_numberic?(str)
    str == "#{str.to_f}" || str == "#{str.to_i}"
end
Run Code Online (Sandbox Code Playgroud)

一些评估为 true 的输入

pry(main)> is_numberic? '5'
=> true
pry(main)> is_numberic? '58127721'
=> true
pry(main)> is_numberic? '58127721.737673'
=> true
pry(main)> is_numberic? '0'
=> true
pry(main)> is_numberic? '1818'
=> true
pry(main)> is_numberic? '0.1'
=> true
pry(main)> is_numberic? '0.0'
=> true
pry(main)> is_numberic? '11.29'
=> true
pry(main)> is_numberic? '-0.12'
=> true
pry(main)> is_numberic? '-29'
=> true
Run Code Online (Sandbox Code Playgroud)

评估结果为 false 的输入

pry(main)> is_numberic? '10 years'
=> false
pry(main)> is_numberic? '01'
=> false
pry(main)> is_numberic? '00'
=> false
pry(main)> is_numberic? '0.10'
=> false
pry(main)> is_numberic? ''
=> false
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,有几种情况可能应该受到支持,例如'0.10',但实际上没有。在这种情况下,允许的输入是'0.1'


Car*_*and 5

def check_string(str)
  str !~ /\D/
end

check_string '123'
  #=> true
check_string ''
  #=> true
check_string '1a2'
  #=> false
Run Code Online (Sandbox Code Playgroud)