Tôi muốn chỉ đơn giản là kiểm tra xem một giá trị trả lại từ một trường văn bản biểu mẫu có phải là một số không, ví dụ: 12, 12,5 hoặc 12,75. Có cách nào đơn giản để kiểm tra điều này, đặc biệt nếu giá trị được kéo dưới dạng param
?Làm cách nào để kiểm tra xem một giá trị có phải là số không?
Trả lời
Chỉ cần regexp nó, nó tầm thường, và không đáng suy nghĩ về xa hơn rằng:
v =~ /\A[-+]?[0-9]*\.?[0-9]+\Z/
(Cố định theo bình luận của Justin)
Trong ruby,^và $ biểu thị đầu/cuối của một dòng, không phải của một chuỗi. Điều này làm cho điều này không hiệu quả để sử dụng như một phương tiện vệ sinh đầu vào (xem http://guides.rubyonrails.org/security.html#regular-expressions). Một cách tiếp cận tốt hơn sẽ là: 'v.to_s = ~/\ A [- +]? \ D * \.? \ D + \ z /'. – Justin
đó không phải là tầm thường, suy nghĩ của một người không có kinh nghiệm! –
Bạn có thể sử dụng
12.is_a? Numeric
(Numeric
sẽ làm việc cho số nguyên và nổi.)
Nếu nó đến như là một chuỗi có thể chứa một đại diện của một số hợp lệ, bạn có thể sử dụng
class String
def valid_float?
true if Float self rescue false
end
end
và sau đó '12'.valid_float?
sẽ trả về true nếu bạn có thể chuyển đổi chuỗi thành một phao hợp lệ (ví dụ: to_f
).
dựa trên tiêu đề, tôi nghĩ rằng điều này là cho ruby (không đường ray) ... – Peter
Xin lỗi, đây là Ruby on Rails ... Về cơ bản, tôi chỉ muốn có thể đánh giá bất kỳ đầu vào nào từ người dùng cho dù đó là. 03 0,3, 2,2 Sau hai công việc, nhưng tôi cần phải có được đầu vào đầu tiên làm việc: S – user211662
'' 'Fixnum''' dường như không hoạt động với phao. Tuy nhiên, '' 'Numeric''' hoạt động tốt. Vì vậy, '' '1.234.is_a? Fixnum == false''', nhưng '' '1.234.is_a? Numeric == true'''. – KurtPreston
Bạn có thể thêm:
validates_numericality_of :the_field
trong mô hình của bạn.
Xem: http://api.rubyonrails.org/classes/ActiveRecord/Validations/ClassMethods.html#M002172
Đây là câu trả lời đúng nhất cho bài toán đã cho, một biểu mẫu Rails. –
tôi sẽ đề nghị này
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
Không hoạt động cho Float :: INFINITY –
Tôi thường chỉ sử dụng Integer và Float những ngày này.
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
giá trị Chuỗi luôn chuyển đổi sang 0 với .to_i
[14] pry(main)> 'Apple'.to_i > 0
=> false
[15] pry(main)> '101'.to_i > 0
=> true
Còn các trường hợp cạnh thì sao? Nếu số đó là 0 hoặc âm thì phép thử của bạn sẽ cho âm sai. – tsikov
Thậm chí tệ hơn '1AB2'.to_i sẽ trả về 1 cho cái gì đó rõ ràng không phải là một số nguyên ... –
Chỉ cần chuyển đổi chuỗi hai lần:
num = '12'
num == num.to_i.to_s
#=> true
num = '3re'
num == num.to_i.to_s
#=> false
Hoạt động không quá tệ với số nguyên, nhưng có rất nhiều cách để thất bại nếu bạn muốn làm theo lời khuyên này với phao (đó là câu hỏi yêu cầu): '" 7 "==" 7 ".to_f.to_s # => false' (" 7 "so với" 7.0 ") –
- 1. Kiểm tra xem một giá trị từ scanf có phải là một số không?
- 2. Làm cách nào để kiểm tra xem liệu giá trị có phải là số nguyên trong MySQL không?
- 3. kiểm tra xem giá trị của một trường text có phải là số nguyên trong javascript
- 4. Làm cách nào để kiểm tra xem chuỗi có giá trị bằng số trong Python không?
- 5. Cách kiểm tra xem chuỗi có phải là một trong các giá trị đã biết không?
- 6. Cách nhanh nhất để kiểm tra xem tất cả các giá trị trong một mảng có phải là số không?
- 7. Có chức năng nào để kiểm tra xem biến chuỗi là giá trị số không?
- 8. Làm cách nào để kiểm tra xem nhiều biến có bằng cùng một giá trị không?
- 9. Kiểm tra xem một chuỗi có phải là số
- 10. PHP kiểm tra xem có bất kỳ giá trị mảng nào không phải là chuỗi hoặc số không?
- 11. Làm cách nào để kiểm tra xem chức năng có phải là một phần không?
- 12. Làm cách nào để kiểm tra xem thông số mẫu có phải là một tham số của hai không?
- 13. Làm cách nào để kiểm tra xem phiên bản perl có lớn hơn một số giá trị không?
- 14. Có cách nào để kiểm tra xem một biến có phải là một số nguyên không? C++
- 15. Kiểm tra xem Html.ValidationSummary() có giá trị
- 16. Làm cách nào để kiểm tra xem một đối số đã cho có phải là đối tượng datetime.date không?
- 17. Cách kiểm tra xem giá trị có được chọn trong tham số nhiều giá trị
- 18. Kiểm tra xem mysqli_query có không có giá trị không?
- 19. Làm cách nào để kiểm tra xem giá trị mảng có trống không?
- 20. Kiểm tra xem char có phải là một dòng mới
- 21. Làm cách nào để kiểm tra xem tệp có phải là hình ảnh không?
- 22. Làm thế nào để kiểm tra, nếu một giá trị là một số nguyên với plpgsql?
- 23. Làm cách nào để kiểm tra xem một số có được đánh giá là vô cùng không?
- 24. Thuật toán để kiểm tra xem một số có phải là số hoàn hảo
- 25. Kiểm tra xem một số nguyên có phải là số nguyên của một số khác
- 26. Java - Cách kiểm tra xem một bộ phận có phải là một số nguyên hay một phao không?
- 27. Cách chính xác để kiểm tra xem giá trị là ngày/số trong Delphi
- 28. Kiểm tra xem đây có phải là
- 29. Java, Kiểm tra xem số nguyên có phải là bội số của một số
- 30. Cách tốt hơn để kiểm tra xem chuỗi có phải là số nguyên trên iPhone không?
um, điều duy nhất là mã làm việc cho is_a_number? hoạt động với ngoại lệ duy nhất là .02, hoặc .3 số .... – user211662
Tôi rất thích giải pháp này: http://stackoverflow.com/questions/5661466/test-if-string-is-a-number-in- ruby-on-rails/5661695 Tôi không biết tại sao rất nhiều người nghĩ rằng một regexp sẽ tốt hơn cho điều đó. –