2011-06-19 4 views
4

ユーザーが入力した入力がgetsで整数であることを検証しようとしています。 is_a?(Integer)は、私が知る限り、getsはユーザーから文字列を取得するので、ユーザーが有効な整数(文字列形式)を入力しても常にfalseを返すため、動作しません。私は単純にto_iを入力に使用してそれを行うことができると思うが、別の問題が発生する。"75akjfas".to_iの結果は75になる。だから私がto_iに頼って私の問題を解決すれば、数字で始まるものはどれもうまくいくでしょう。ユーザーが入力した文字列がルビの整数であるかどうかを調べるうまい方法ですか?

値が数字と文字の組み合わせではなく整数のみであることをきれいに検証するにはどうすればよいですか?または、私はこれの正規表現に頼る必要がありますか?

+0

[ruby 1.9.2にはis_aがありますか?関数?](http://stackoverflow.com/questions/4282273/does-ruby-1-9-2-have-an-is-a-function) –

答えて

6

s.to_i.to_s == s?私は正規表現を好むだろう。

あなたはこのようにそれを行うことができます正規表現を使用して
+0

私はregexpを使用しない理由がありません。私はちょうどそこに私が行方不明の素敵なヘルパー機能があることを望んでいる:)。 – sepiroth

6
print "Enter an integer (or try to sneak by something other): " 
puts Integer(gets) rescue puts "Hey, that's not an integer!" 
+0

引用符を追加するだけです(http://ruby-doc.org/core/classes/Kernel.html#M001434): "文字列は数値表現に厳密に準拠している必要があります。 String#to_i " – matt

1

class String 
    def integer? 
    !!(self =~ /^[-+]?[0-9]+$/) 
    end 
end 
-2

Rubyは難解な解決策なしでそれを行うことができます。

整数整数

1970.is_a?Integer 
true 

文字列ではありません整数

= USER_INPUT = gets.chomp チェック:整数へ

文字列は整数

"1970".to_i.is_a?Integer 
true 
+1

これは完全に正しいとは思われません。 @LyleDickieがこれを提案された編集として書いた: 残念ながら、 "整数への文字列は整数です"セクションは間違っています。 IRBで実行するとtrueを返します。しかし、ユーザーが「197e」と入力すると、それも真と評価されます。 '' ' " 197e ".to_i.is_a?整数 true ' '' – oligofren

+1

"a" .to_iは0です。これはまだ整数です。 – kgpdeveloper

0

チェック を置く
は「番号を入力し、」利用者によって確認された文字列の入力を使用する方法については、このコード例であります(user_input.to_i.to_s == USER_INPUT)

while (!check) do 
puts("Wrong Input, Pls, Enter a number: ") 
user_input = gets.chomp 
    check = (user_input.to_i.to_s == user_input) 
end 

if user_input.to_i < 0 
puts "Number is negative" 
elsif user_input.to_i > 0 
puts "Number is positve" 
else 
puts "Number is Zero" 
end 
+0

提供したリンクにより、アプリケーションエラーが発生します。たぶんそれはちょうど過ぎる状況ですが、あなたが訂正する必要がある永続的なものかどうかを検討してください。また、あなたが提供したリンクとあなたの答えのサンプルコードとの間の接続はあまり明確ではありません。彼らは同じですか?答えを編集して明確にする。 – J0e3gan

+1

ありがとうございます@ J0e3gan私はリンクを削除して、あなたがそこにそれを実行することができるだけ同じことを示しています...私は私に私的なリンクを気づいた。 – user3410041

1

あなたはInteger()を使用することができますが、HEX、バイナリ、またはオクタル入力して注意する必要があります。 http://ruby-doc.org/core-2.3.1/Kernel.html#method-i-Integer

def valid_integer?(string) 
    begin 
    !!Integer(string) 
    rescue ArgumentError 
    false 
    end 
end 
関連する問題