それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

Rubyで文字列が整数値に変換できるか調べる

Rubyで文字列が数字変換可能か調べたい。引数とか文字列で取っておいて数字に変換できるか。

String#to_i のこの仕様が死ぬほど嫌だ

"3".to_i  #=> 3
"2".to_i  #=> 2
"1".to_i  #=> 1
"0".to_i  #=> 0
"a".to_i  #=> 0 ←!!!

to_i して 0ならダメってやろうとして、詰んだ。

php なら is_numeric関数で済む

<?php 
var_dump( is_numeric("0") ); #=> true

もっともPHPの場合は、諸刃の剣でして・・・

String#to_iやto_fはある程度は判別できるけど。。。

じゃぁ元々0は?
じゃぁ・・・ 0.1は?

ってなるので、こまる。to_f か、to_iかそこが問題だ。

そこで正規表現を使う。判定が安定。

"10" =~ /\d+/  #=> 0

ただし、これも数字と文字をよく間違うので注意が必要

10 =~ /\d+/ #=> false

別解 Interger("文字列") を使う解決方法もあった。

Integerを使う。
Integer("a")
ArgumentError: invalid value for Integer: "a"
from (irb):1:in `Integer'
from (irb):1

http://eity.que.jp/wordpress/archives/762


Integer(“a”)をするとエラーになるので、それを使う。悪くないけど、 rescueが面倒



1.9でも改善されてないかなぁ

もっといい方法ないんかいな is_numeric はPHPの偉大な発明だとおもうわ。便利だなぁ。