Ruby Recipe38 数値を表す文字列か調べる

文字列が"1"とか"123"とか数値を表すものかどうかを調べたい時には以下のやり方で調べられます。

# Integer()で変換できれば数値、例外発生したら違う
def integer_string?(str)
  Integer(str)
  true
rescue ArgumentError
  false
end

# Float()で変換できれば数値、例外発生したら違う
def float_string?(str)
  Float(str)
  true
rescue ArgumentError
  false
end

ちなみに結果は以下のようになります。

str = "あいうえお"
str2 = "123"
str3 = "3.14"
str4 = "12345"

# 普通の文字列
integer_string?(str)         #=> false
# 数値の文字列
integer_string?(str2)        #=> true
# 小数点の文字列
integer_string?(str3)        #=> false
# 全角数字の文字列
integer_string?(str4)        #=> false

# 普通の文字列
float_string?(str)           #=> false
# 数値の文字列
float_string?(str2)          #=> true
# 小数点の文字列
float_string?(str3)          #=> true
# 全角数字の文字列
float_string?(str4)          #=> false

小数点の場合、結果が異なるので(Integer()使ってるので)場合によって使い分けるのがいいかもですね!

ちなみに to_i メソッドとかの場合、無理やり変換しようとしてしまい例外が発生しないので、Integer()を使わないとなのですよー

Rubyレシピブック 第3版 303の技

Rubyレシピブック 第3版 303の技