Ruby で is_numeric
PHP の is_numeric( ) みたいなのを Ruby でやる場合はこんな感じでいいのかなー?
def numeric? (value) return true if value.kind_of?(Numeric) !!(Integer(value) rescue Float(value)) rescue false end
これで、以下のようにテストしてみたら、だいたい OK な気がする。
require 'minitest/autorun' class TestNumeric < Minitest::Test def test_numeric assert_equal(true, numeric?(1)) assert_equal(true, numeric?('2')) assert_equal(true, numeric?('3.4')) assert_equal(true, numeric?('-5')) assert_equal(true, numeric?('-6.7')) assert_equal(false, numeric?('Infinity')) assert_equal(false, numeric?('Float::INFINITY')) assert_equal(true, numeric?(Float::INFINITY)) assert_equal(false, numeric?('1abc')) assert_equal(false, numeric?('def2.3')) assert_equal(true, numeric?('0x1f')) assert_equal(false, numeric?('0xfg')) assert_equal(false, numeric?('0b1a')) assert_equal(true, numeric?('0b1011')) assert_equal(true, numeric?('2.0e-10')) assert_equal(true, numeric?('-2.0e10')) end end
場合によっては本当は false になって欲しいような部分もありそうだけど、どうでしょう?