Quiero simplemente verificar si un valor devuelto de un campo de texto de formulario es un número, es decir, 12, 12.5 o 12.75. ¿Hay alguna manera simple de verificar esto, especialmente si el valor se extrae como param
?¿Cómo puedo verificar si un valor es un número?
Respuesta
Sólo expreg él, es trivial, y no vale la pena pensar más allá de eso:
v =~ /\A[-+]?[0-9]*\.?[0-9]+\Z/
(Fijo según el comentario de Justin)
En ruby,^y $ denotan el comienzo/final de una línea, no de una cadena. Esto hace que esto no sea efectivo para usar como medio de desinfección de insumos (ver http://guides.rubyonrails.org/security.html#regular-expressions). Un mejor enfoque sería: 'v.to_s = ~/\ A [- +]? \ D * \.? \ D + \ z /'. – Justin
que no es trivial, ¡piensa en alguien que no tenga tanta experiencia! –
Puede utilizar
12.is_a? Numeric
(Numeric
funcionará para los enteros y los flotadores.)
Si llega como una cadena que puede contener una representación de un número válido, podría utilizar
class String
def valid_float?
true if Float self rescue false
end
end
y luego '12'.valid_float?
devolverá verdadero si puede convertir la cadena en un flotante válido (por ejemplo, con to_f
).
basado en el título, pensé que esto era para ruby (no rieles) ... – Peter
Lo siento, esto es Ruby on Rails ... Básicamente, solo quiero poder evaluar cualquier entrada del usuario, ya sea. 03 0.3, 2.2 Los dos últimos funcionan, pero necesito que la primera entrada funcione: S – user211662
'' 'Fixnum''' no parece funcionar con flotadores. Sin embargo, '' 'Numeric''' funciona bien. Entonces '' '1.234.is_a? Fixnum == falso''', pero '' '1.234.is_a? Numérico == verdadero'''. – KurtPreston
Se puede añadir un:
validates_numericality_of :the_field
en su modelo.
Ver: http://api.rubyonrails.org/classes/ActiveRecord/Validations/ClassMethods.html#M002172
Esta es la respuesta más correcta para el problema dado, una forma de Rails. –
Yo sugeriría éste
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
No funciona para Float :: INFINITY –
Suelo usar Integer y Float en estos días.
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
valores de cadena siempre se convierten a 0 con .to_i
[14] pry(main)> 'Apple'.to_i > 0
=> false
[15] pry(main)> '101'.to_i > 0
=> true
¿Qué hay de las cajas de borde? Si el número es 0 o negativo, su prueba dará un falso negativo. – tsikov
Aún peor '1AB2'.to_i devolvería 1 para algo que claramente no es un Entero ... –
Sólo convertir la cadena en dos ocasiones:
num = '12'
num == num.to_i.to_s
#=> true
num = '3re'
num == num.to_i.to_s
#=> false
No funciona tan mal con enteros, pero hay tantas maneras de fallar si desea seguir este consejo con flotadores (que es de qué se trata la pregunta): '" 7 "==" 7 ".to_f.to_s # => false' (" 7 "frente a" 7.0 ") –
- 1. Compruebe si el valor es un número
- 2. Verificar si un número ingresado es impar
- 3. Compruebe si un valor de scanf es un número?
- 4. Rieles: ¿Cómo puedo verificar si una columna tiene un valor?
- 5. ¿Cómo verificar si un valor es un número entero con plpgsql?
- 6. Perl, ¿cómo determinar si un valor variable es un número?
- 7. ¿Cuál es la forma correcta de verificar si un valor es una fecha/número en Delphi
- 8. Regex para verificar si un número es par
- 9. ¿Cómo puedo verificar si un número (tipo doble) almacenado como una cadena es un número doble válido en C++?
- 10. Determinar si un valor es un número entero en Python
- 11. ¿Cómo puedo verificar si un entero con signo es positivo?
- 12. ¿Cómo puedo verificar si un gráfico dirigido es acíclico?
- 13. ¿Cómo puedo verificar si un identificador de MATLAB es válido?
- 14. ¿Cómo puedo verificar si existe un directorio?
- 15. ¿cómo puedo verificar si existe un archivo?
- 16. ¿Cómo detectar si un número dado es un número entero?
- 17. ¿Cómo puedo verificar si un int es un HttpStatusCode legítimo en .NET?
- 18. ¿Determinar si el valor de JavaScript es un "número entero"?
- 19. Pruebe si el valor es un número entero en Sass
- 20. ¿Cómo verificar si el número es divisible por un cierto número?
- 21. ¿Cómo verifico si un valor es un número entero en MySQL?
- 22. ¿Cómo puedo verificar si un vector es un subconjunto de otro?
- 23. ¿Cómo verificar si existe un valor de matriz?
- 24. ¿Cómo puedo verificar si existe un procedimiento en un paquete?
- 25. ¿Cómo puedo verificar si un valor está contenido en un vector? C++
- 26. ¿Cómo puedo probar si un número de coma flotante es un número entero en haskell?
- 27. ¿Cuál es una buena manera de verificar si un doble es un número entero en C#?
- 28. XPath test si el valor del nodo es el número
- 29. ¿Por qué no puedo verificar si un 'DateTime' es 'Nothing'?
- 30. Cómo verificar si un valor de matriz profunda está presente
um, lo único es que el código funciona para is_a_number? funciona con la única excepción de .02 o .3 números .... – user211662
Yo prefiero esta solución: http://stackoverflow.com/questions/5661466/test-if-string-is-a-number-in- ruby-on-rails/5661695 No sé por qué tanta gente piensa que una expresión regular sería mejor para eso. –