[英]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.