Ich möchte einfach überprüfen, ob ein zurückgegebener Wert aus einem Formularfelder eine Zahl ist, nämlich: 12, 12.5 oder 12.75. Gibt es eine einfache Möglichkeit, dies zu überprüfen, insbesondere wenn der Wert als param
gezogen wird?Wie kann ich überprüfen, ob ein Wert eine Zahl ist?
Antwort
Nur regexp es, es ist trivial, und nicht wert, über darüber hinaus zu denken:
v =~ /\A[-+]?[0-9]*\.?[0-9]+\Z/
(Fest nach Justins Kommentar)
In Ruby bezeichnen^und $ den Anfang/das Ende einer Zeile, nicht einer Zeichenfolge. Dies macht es unwirksam, als Mittel zur Bereinigung von Eingaben zu verwenden (siehe http://guides.rubyonrails.org/security.html#regular-expressions). Ein besserer Ansatz wäre: 'v.to_s = ~/\ A [- +]? \ D * \.? \ D + \ z /'. – Justin
das ist nicht trivial, denke an jemanden, der nicht so erfahren ist! –
können Sie verwenden
12.is_a? Numeric
(Numeric
für ganze Zahlen und Schwimmer arbeiten.)
Wenn es als String kommt, die eine Darstellung einer gültigen Zahl enthalten könnten, könnten Sie
class String
def valid_float?
true if Float self rescue false
end
end
und dann '12'.valid_float?
wird True zurückgegeben, wenn Sie die Zeichenfolge in eine gültige Gleitkomma (z. B. mit to_f
) konvertieren können.
basierend auf dem Titel, dachte ich, das war für Ruby (nicht Schienen) ... – Peter
Sorry, das ist Ruby on Rails ... Grundsätzlich möchte ich nur in der Lage sein, jede Eingabe vom Benutzer zu bewerten, ob es sein soll. 03 0.3, 2.2 Die letzten beiden funktionieren, aber ich muss den ersten Eingang arbeiten: S – user211662
'' '' Fixnum''' scheint nicht mit Floats zu arbeiten. '' 'Numeric''' funktioniert jedoch einwandfrei. Also '' '1.234.is_a? Fixnum == false''', aber '' '1.234.is_a? Numerisch == true'''. – KurtPreston
Sie können eine hinzufügen:
validates_numericality_of :the_field
in Ihrem Modell.
See: http://api.rubyonrails.org/classes/ActiveRecord/Validations/ClassMethods.html#M002172
Dies ist die korrekteste Antwort für das gegebene Problem, ein Rails-Formular. –
Ich würde vorschlagen, dieses
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
Funktioniert nicht für Float :: INFINITY –
Normalerweise verwende ich Integer und Float in diesen Tagen.
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
String-Werte konvertieren immer auf 0 mit .to_i
[14] pry(main)> 'Apple'.to_i > 0
=> false
[15] pry(main)> '101'.to_i > 0
=> true
Was ist mit Kanten Fällen? Wenn die Zahl 0 oder negativ ist, wird Ihr Test ein falsches Negativ ergeben. – tsikov
Noch schlimmer '1AB2'.to_i würde 1 für etwas zurückgeben, das eindeutig keine Ganzzahl ist ... –
konvertieren Nur Zeichenfolge zweimal:
num = '12'
num == num.to_i.to_s
#=> true
num = '3re'
num == num.to_i.to_s
#=> false
Funktioniert nicht so schlecht mit Ganzzahlen, aber es gibt so viele Möglichkeiten zu scheitern, wenn Sie diesen Ratschlag mit Gleitkommazahlen befolgen wollen (was ist worum die Frage geht: '" 7 "==" 7 ".to_f.to_s # => false' (" 7 "vs" 7.0 ") –
- 1. Überprüfen, ob ein doppelter Wert eine ganze Zahl ist - Swift
- 2. Wie kann man überprüfen, ob ein Wert eine Zahl in SQLite ist
- 3. Prüfen, ob ein Wert von scanf eine Zahl ist?
- 4. Wie kann ich überprüfen, ob der doppelte Wert übergelaufen ist
- 5. Überprüfen Sie, ob der Wert eine ganze Zahl in PHP
- 6. Überprüfen Sie, ob eine Zeichenfolge eine Zahl ist
- 7. Wie kann ich überprüfen, ob ein Wert in einem String eine IP-Adresse ist
- 8. Wie kann ich überprüfen, ob eine als String gespeicherte Zahl (double type) eine gültige doppelte Zahl in C++ ist?
- 9. Wie überprüft man, ob eine dreistellige Zahl ein Palindrom ist?
- 10. Wie kann ich überprüfen, ob ein Zertifikat selbstsigniert ist?
- 11. Wie kann ich überprüfen, ob ein Dialog geschlossen ist?
- 12. Wie kann ich überprüfen, ob ein AD-Konto gesperrt ist?
- 13. Wie kann ich überprüfen, ob eine Zahl n durch 10 teilbar ist?
- 14. Wie kann ich überprüfen, ob mein Python-Objekt eine Zahl ist?
- 15. Wie kann ich überprüfen, ob ein Vim-Puffer änderbar ist?
- 16. Wie kann ich überprüfen, ob eine Struktur initialisiert wurde?
- 17. Überprüfen Sie, ob die Variable eine Zahl ist
- 18. Wie kann ich überprüfen, ob ein Array leer ist?
- 19. Was ist die korrekte Art zu überprüfen, ob ein Wert ein Datum/eine Zahl in Delphi ist?
- 20. awk: Überprüfen Sie, ob eine Zahl zwischen zwei Zahlen ist
- 21. Wie kann ich überprüfen, ob eine Zeichenfolge auf Englisch ist?
- 22. überprüfen Sie, ob Objekt eine Zahl oder boolean ist
- 23. Wie kann man mit pythons isinstance() überprüfen, ob eine Variable eine Zahl ist?
- 24. Überprüfen, ob eine Zahl + -Inf oder NaN ist
- 25. Überprüfen, ob ein Typ eine Karte ist
- 26. überprüfen, ob eine Datei ein Bild ist
- 27. Php, wie zu überprüfen, ob eine digitale Zahl ist größer als ein anderer
- 28. Überprüfen Sie, ob eine Zahl in einem Array kleiner ist als eine Zahl im anderen Array
- 29. Wie überprüfen, ob Wertnummer ist
- 30. Wie testen, ob ein Double eine ganze Zahl ist
um, die einzige Sache ist, dass der Code für is_a_number funktioniert? funktioniert mit der einzigen Ausnahme ist. 02, oder .3 Zahlen .... – user211662
Ich bevorzuge diese Lösung: http://StackOverflow.com/Questions/5661466/Test-if-String-is-Anumber-in- ruby-on-rails/5661695 Ich weiß nicht, warum so viele Leute denken, eine Regexp wäre dafür besser. –