2012-05-14 13 views
8

可能性の重複:
Test if a string is basically an integer in quotes using Ruby?ルビー:文字列を整数に変換できるかどうかをチェック

 
"1" 
"one" 

最初の文字列が数値である、と私はちょうどにto_iを言うことができます整数を得る。
2番目の文字列も数字ですが、目的の番号を取得するためにto_iを直接呼び出すことはできません。

to_iを使用して正常に変換できるかどうかを確認するにはどうすればよいですか?

答えて

19

それは変換できない場合to_iとは違って例外が発生しますInteger方法があります:あなたの文字列の場合は

Integer(foo) rescue nil 

>> Integer "1" 
=> 1 
>> Integer "one" 
ArgumentError: invalid value for Integer(): "one" 

私はあなたがインライン救助にそれを使うことができると思いますが、あなたは整数を得るでしょう、そうでなければnil(またはあなたがrescueの後ろに入れたい他のもの)を変換することができます。

Integerメソッドは、Rubyで私が知っている最も包括的なチェックです(先頭のゼロは8進数で9は無効な数字なので、 "09"は変換されません) 。これらすべてのケースを正規表現でカバーすることは悪夢になるだろう。