如何在Ruby中编写REGEX以确保字符串仅为整数。例如
3 --> Returns true
3g --> Returns False
4.3 --> Returns False
同样,我如何编写REGEX以确保它是浮动的? 例如
3 --> Returns False
3g --> Returns False
4.3 --> Returns True
对于int和float我都需要REGEX。我认为对于浮点数它只是/ \ d + /和/\d+.\d+/但是不起作用。
答案 0 :(得分:3)
正则表达式不是解决此问题的最佳方法。覆盖所有可能性的最简单方法是使用Kernel#Float
尝试将字符串转换为Float
,然后捕获异常:
def float?(str)
!!Float(str)
rescue ArgumentError
false
end
这将涵盖前导符号('+2.18'
,-3.14
),忽略前导和尾随空格,甚至处理浮点数的科学记数法。仅使用Kernel#Float
的一个漏洞是即使'NaN'
为Float
,它也不会将Float::NAN.to_s == 'NaN'
理解为'NaN'
,如果您想考虑Float
成为def float?(str)
str.strip == 'NaN' || !!Float(str)
rescue ArgumentError
false
end
然后你可以这样做:
Float::INFINITY
同样适用于'Infinity'
/ -Float::INFINITY
和'-Infinity'
/ {{1}}。
如果你想分别检查整数,还有Kernel#Integer
。
答案 1 :(得分:1)
你想要一个匹配整数和浮点数的正则表达式吗?
/\A[-+]?\d+(\.\d+)?\z/
这匹配一系列数字(至少一个),可选地后跟一个点和另一系列数字。
答案 2 :(得分:0)
str = "111"
if(str =~ /^\d+$/)
print "matched\n";
end
str = "4.3"
if(str =~ /^\d+\.\d+$/)
print "matched\n";
end
答案 3 :(得分:0)
检查它是否为整数:
"3" !~ /\D/
"3g" !~ /\D/
"4.3" !~ /\D/
检查它是否浮动:
!!("3" =~ /\A\d+\.\d+\z/)
!!("3g" =~ /\A\d+\.\d+\z/)
!!("4.3" =~ /\A\d+\.\d+\z/)