检查Ruby中的字符串是否只包含正数

时间:2014-02-16 16:56:17

标签: ruby string

我对很新,并想知道是否可以使用或其他功能检查字符串是否只包含正数?

str = "123abcd"  #return false because it contains alphabets
str = "153"      #return true because of all numbers

5 个答案:

答案 0 :(得分:20)

目前使用正则表达式的所有其他答案效率低下。

"123abcd" !~ /\D/ # => false
"153" !~ /\D/     # => true

答案 1 :(得分:5)

当然Regexp对此有好处:

string = "123abcd"
/^(?<num>\d+)$/ =~ string
num # => nil

string = "123"
/^(?<num>\d+)$/ =~ string
num # => '123' # String

因此,如果您需要检查条件:

if /^(?<num>\d+)$/ =~ string
   num.to_i # => 123
   # do something...
end
#to_i的{​​{1}}方法对您的案例无效,因为如果字符串甚至包含字母,它将返回一个数字:

String

答案 2 :(得分:4)

if '123'.match(/^\d+$/)
  # code
end

答案 3 :(得分:2)

我使用Regexp#===,如下所示:

str = "123abcd"
/^\d+$/ === str  # => false # because string not only contains digits
str = "153" 
/^\d+$/ === str  # => true  # because string only contains digits

更新(考虑@ sawa的comment1comment2

str = "123abcd"
/\D/ === str  # => true  # because string contains non-digit
str = "153" 
/\D/ === str  # => false # because string doesn't contain any non-digit

答案 4 :(得分:0)

我最初在“只有正数位”是一个要求时才回答这个问题,但是我看到它已经改为“只有正数”(原来的措辞),这部分是因为给出的例子(排除了解释"12abc34" => true"12abc-34" => false并且不建议解释"1.5abc" => true),我的意思是“一个正整数”。我的答案更准确地说明了我的假设:

str =~ /^0*[1-9]\d*$/

这个问题提出了另一个问题:“有多少Rubiests可以在别针头上跳舞?”也许这只是一个缓慢的新闻日。感谢@sawa和@Mark的评论。