[ruby-on-rails] 값이 숫자인지 어떻게 확인할 수 있습니까?

양식 텍스트 필드에서 반환 된 값이 숫자 즉, 12, 12.5 또는 12.75인지 확인하고 싶습니다. 이를 확인하는 간단한 방법이 param있습니까? 특히 값이 ?



답변

그냥 regexp, 사소하고 그 이상으로 생각할 가치가 없습니다.

v =~ /\A[-+]?[0-9]*\.?[0-9]+\Z/

(Justin의 의견에 따라 수정 됨)


답변

당신이 사용할 수있는

12.is_a? Numeric

( Numeric정수 및 부동 소수점에서 작동합니다.)

유효한 숫자의 표현을 포함 할 수있는 문자열로 도착하면 다음을 사용할 수 있습니다.

class String
  def valid_float?
    true if Float self rescue false
  end
end

그리고 '12'.valid_float?당신이 (예를 들어있는 유효한 float로 문자열을 변환 할 수있는 경우에 true를 돌려줍니다 to_f).


답변

요즘은 보통 Integer와 Float 만 사용합니다.

1.9.2p320 :001 > foo = "343"
 => "343"
1.9.2p320 :003 > goo = "fg5"
 => "fg5"

1.9.2p320 :002 > Integer(foo) rescue nil
 => 343
1.9.2p320 :004 > Integer(goo) rescue nil
 => nil

1.9.2p320 :005 > Float(foo) rescue nil
 => 343.0
1.9.2p320 :006 > Float(goo) rescue nil
 => nil


답변

다음을 추가 할 수 있습니다.

validates_numericality_of :the_field

모델에서.

참조 : http://api.rubyonrails.org/classes/ActiveRecord/Validations/ClassMethods.html#M002172


답변

문자열을 두 번 변환하십시오.

num = '12'
num == num.to_i.to_s
#=> true 

num = '3re'
num == num.to_i.to_s
#=> false


답변

나는 이것을 제안 할 것이다

def is_number?
  self.to_f == self
end

> 15.is_number?
=> true
> 15.0.is_number?
=> true
> 'Not a number'.is_number?
=> false
> (0/0.0).is_number?
=> false


답변

irb(main):005:0> 1.1.is_a? Numeric
=> true
irb(main):006:0> 1.is_a? Numeric
=> true
irb(main):007:0> 'asd'.is_a? Numeric
=> false