Ruby:检查字符串是否可以转换为整数

MxL*_*evs 10 ruby

可能重复:
使用Ruby测试字符串是否基本上是引号中的整数?

"1"
"one"

第一个字符串是一个数字,我可以说to_i得到一个整数.
第二个字符串也是一个数字,但我不能直接调用to_i来获得所需的数字.

如何检查是否可以使用to_i成功转换?

Mic*_*ohl 23

有一种Integer方法不同,to_i如果它无法转换会引发异常:

>> Integer "1"
=> 1
>> Integer "one"
ArgumentError: invalid value for Integer(): "one"
Run Code Online (Sandbox Code Playgroud)

我想你可以使用内联救援:

Integer(foo) rescue nil
Run Code Online (Sandbox Code Playgroud)

如果你的字符串可以被转换,你将得到整数,否则nil(或者你想要放在其他任何地方rescue).

虽然引发异常可能看起来有点过分,但这种Integer方法是我在Ruby中所知道的最全面的检查(例如"09"将不会转换,因为前导零使其成为八进制而9是无效数字).用正则表达式覆盖所有这些案例将是一场噩梦.

  • 从Ruby 2.6.0开始,可以通过使用Integer(“ one”,exception:false)来避免`rescue nil`。在这里查看我的答案:/sf/answers/3781602471/ (2认同)