簡體   English   中英

如何檢查值是否為數字?

[英]How can I check if a value is a number?

我想簡單地檢查表單文本字段的返回值是否為數字,即:12、12.5 或 12.75。 有沒有一種簡單的方法來檢查這一點,特別是如果將該值作為param提取?

您可以使用

12.is_a? Numeric

Numeric適用於整數和浮點數。)

如果它作為可能包含有效數字表示的字符串到達​​,您可以使用

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

然后'12'.valid_float? 如果您可以將字符串轉換為有效的浮點數(例如使用to_f ),將返回 true。

這些天我通常只使用整數和浮點數。

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

只需對其進行正則表達式,這很簡單,除此之外不值得考慮:

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

(根據賈斯汀的評論修復)

您可以添加一個:

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_a_number?(str)
  !!(Float(str) rescue false)
end

> is_a_number?(1)
 => true

> is_a_number?(1.1)
 => true 

> is_a_number?('1')
 => true 

> is_a_number?('1.1')
 => true 

> is_a_number?('a')
 => false 

> is_a_number?(nil)
 => 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

Kernel#Float有答案

但是這個變體的使用有exception: false鍵和雙鍵返回布爾值

class String
  def number?
    !!Float(self, exception: false)
  end
end

字符串值始終使用 .to_i 轉換為 0

[14] pry(main)> 'Apple'.to_i > 0
=> false

[15] pry(main)> '101'.to_i > 0
=> true

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM