Voglio semplicemente verificare se un valore restituito da un campo di testo del modulo è un numero, ad es. 12, 12.5 o 12.75. C'è un modo semplice per controllare questo, soprattutto se il valore viene tirato come param
?Come posso verificare se un valore è un numero?
risposta
Proprio regexp esso, è banale, e non la pena di pensare al di là:
v =~ /\A[-+]?[0-9]*\.?[0-9]+\Z/
(fisso come da commento di Justin)
In ruby,^e $ indicano l'inizio/la fine di una riga, non di una stringa. Ciò rende questo inefficace usare come mezzo per disinfettare gli input (vedi http://guides.rubyonrails.org/security.html#regular-expressions). Un approccio migliore sarebbe: 'v.to_s = ~/\ A [- +]? \ D * \.? \ D + \ z /'. – Justin
che non è banale, pensa a qualcuno che non è così esperto! –
È possibile utilizzare
12.is_a? Numeric
(Numeric
funzionerà per gli interi e carri allegorici.)
Se arriva come una stringa che potrebbe contenere una rappresentazione di un numero valido, è possibile utilizzare
class String
def valid_float?
true if Float self rescue false
end
end
e quindi '12'.valid_float?
restituirà true se è possibile convertire la stringa in un valore valido (ad esempio con to_f
).
basato sul titolo, ho pensato che fosse per ruby (non rotaie) ... – Peter
Mi spiace, questo è Ruby on Rails ... Fondamentalmente, voglio solo essere in grado di valutare qualsiasi input da parte dell'utente sia. 03 0.3, 2.2 Gli ultimi due funzionano, ma ho bisogno di ottenere il primo input funzionante: S – user211662
'' 'Fixnum''' non sembra funzionare con i float. Tuttavia, '' 'Numeric''' funziona bene. Quindi '' '1.234.is_a? Fixnum == false''', ma '' '1.234.is_a? Numerico == true'''. – KurtPreston
È possibile aggiungere una:
validates_numericality_of :the_field
nel modello.
See: http://api.rubyonrails.org/classes/ActiveRecord/Validations/ClassMethods.html#M002172
Questa è la risposta più corretta per il problema dato, un modulo Rails. –
vorrei suggerire questo
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
Non funziona per Float :: INFINITY –
Di solito uso solo Integer e Float in questi giorni.
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
valori stringa convertono sempre a 0 con .to_i
[14] pry(main)> 'Apple'.to_i > 0
=> false
[15] pry(main)> '101'.to_i > 0
=> true
E i casi limite? Se il numero è 0 o negativo, il test darà un falso negativo. – tsikov
Ancora peggio '1AB2'.to_i restituirebbe 1 per qualcosa che chiaramente non è un numero intero ... –
solo convertire stringa due volte:
num = '12'
num == num.to_i.to_s
#=> true
num = '3re'
num == num.to_i.to_s
#=> false
Non funziona così male con i numeri interi, ma ci sono tanti modi per fallire se si vuole seguire questo consiglio con i float (che è di cosa si pone la domanda): '" 7 "==" 7 ".to_f.to_s # => false' (" 7 "vs" 7.0 ") –
- 1. Come verificare se un doppio è un numero intero
- 2. Verificare se è selezionato un valore ComboBox
- 3. Come rilevare se un dato numero è un numero intero?
- 4. Come verificare se il numero è NaN
- 5. Come posso verificare se esiste un valore del database Firebase?
- 6. Java come posso verificare con reflection se un campo è inizializzato o è un valore predefinito?
- 7. Come posso verificare se una stringa è un float?
- 8. come verificare se il carattere è un numero intero
- 9. Twig - Come verificare se la variabile è un numero/intero
- 10. Come posso verificare se un carattere è una lettera o un numero?
- 11. Verifica se il valore è un numero intero in Sass
- 12. Come posso verificare se un UIViewController è attualmente visualizzato?
- 13. alternativa da verificare, se un valore è in un set
- 14. Come verificare se un valore è vuoto in Lua?
- 15. Come posso verificare se un determinato valore è un elenco generico?
- 16. Come posso verificare se un parametro del metodo generico è un tipo di valore?
- 17. Verificare se un valore è definito in un C enum?
- 18. Come verificare se un DataGridViewCheckBoxCell è verificato
- 19. Come posso verificare se il valore dell'array è vuoto?
- 20. Verificare se Html.ValidationSummary() ha un valore
- 21. come posso verificare se esiste un file?
- 22. Verificare se è un oggetto
- 23. Come posso verificare se un repository è nudo?
- 24. Come posso verificare se un grafico diretto è aciclico?
- 25. Come posso verificare se un JSON è vuoto in NodeJS?
- 26. Come posso verificare se un campo dell'editor CK è vuoto
- 27. Come posso verificare se un modulo PowerShell è installato?
- 28. Come posso verificare se un filehandle è aperto in Perl?
- 29. Come posso verificare se un elemento non è definito?
- 30. Come posso verificare se un IP è attivo in java?
um, l'unica cosa è che il codice funziona per is_a_number? funziona con l'unica eccezione di .02, o .3 numeri .... – user211662
Preferisco di gran lunga questa soluzione: http://stackoverflow.com/questions/5661466/test-if-string-is-a-number-in- ruby-on-rails/5661695 Non so perché così tante persone pensano che una regexp sarebbe meglio per questo. –