我对ruby很新,并想知道是否可以使用regex或其他功能检查字符串是否只包含正数?
str = "123abcd" #return false because it contains alphabets
str = "153" #return true because of all numbers
答案 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的comment1和comment2 )
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的评论。