メモの日々


2009年10月21日(水) [長年日記]

[ruby] 文字列が数値かどうかのチェック

文字列が数値を表わすかどうかをRubyの正規表現でチェックしようとして少し悩んだのでメモ。小数もOKにしたい。できたのは

/\A[+-]?\d+(\.\d+)?\z/

だ。(自分で考えたのは「/\A[+-]?(\d+\.\d+|\d+)\z/」だったのだけれど、この日記を書いている途中に[ruby-list:15007] Re: 文字列から数値への変換失敗を検出したいを見つけてそれを参考に変更した)

以下動作確認プログラムと実行結果。

def decimal?(str)
  if str =~ /\A[+-]?\d+(\.\d+)?\z/
    puts "o '#{str}'"
    true
  else
    puts "x '#{str}'"
    false
  end
end

decimal?("1.0")
decimal?("0")
decimal?("-10")
decimal?("+0.123000")
decimal?("00001.00099")
decimal?("0.")
decimal?(".0")
decimal?("1..0")
decimal?("1+2")
decimal?("55a")
o '1.0'
o '0'
o '-10'
o '+0.123000'
o '00001.00099'
x '0.'
x '.0'
x '1..0'
x '1+2'
x '55a'