JavaFree.org | RubyOnBr.org

Como verificar se um parâmtro digitado é numérico ?

Acompanhar Como verificar se um parâmtro digitado  é numérico ? 11 posts, 5 participantes

Avatar Marcio Aun M... 21 posts

Olá,

Tenho um text_field e quero saber se o valor digitado é numérico. Acontece que não há nenhum modelo associado ao formulário, de forma que não tenho como aplicar validates_numericality.

Tem alguma função isNumeric?

Obrigado

Marcio

 
Avatar Gustavo 'Vat... 16 posts

Marcio,

Você pode usar o método is_a?, veja:

Na verdade, relendo sua pergunta, o is_a? não te ajuda…

Acho que eu faria um teste assim:

Espero ter ajudado…

[]’s

 
Avatar nofxx 361 posts

var.kind_of?(Numeric) => kind_of eh alias de is_a

var.instance_of?(Fixnum) => instance ja qr aclasse imediata

var.to_i if var.respond_to(:to_i)

 
Avatar Fernando Luizao 402 posts

Como os parâmetros vem como string, acho mais fácil usar algo do tipo:


class String
def is_int?
self =~ /^[0-9]+$/
end

def is_float? self =~ /^[0-9](\.[0-9])?$/ end def is_numeric? is_int? || is_float? end

end


Usando

if “1”.is_int?
do_stuff
end

 
Avatar Mereghost 844 posts

Marco:

Na hora em que é digitado ou após o formulário ser enviado ou os dois?

No lado do servidor acho que o melhor é uma Regex mesmo, já que tudo chega como texto.

 
Avatar Marcio Aun M... 21 posts

É no controller, após receber os dados digitados. HAvia pensado ( tipo java ) em forçar uma conversão, e, havendo erro ( catch ), é porque não é numérico.
Vou tentar o regex.

Obrigado

Marcio

 
Avatar Fernando Luizao 402 posts

HAvia pensado ( tipo java ) em forçar uma conversão, e, havendo erro ( catch )

Faz isso não, porque não é disparada uma exceção quando a string não é um numero. Exemplo

“banana”.to_i
=> 0

Nesse caso regex é a melhor saída mesmo.

 
Avatar Gustavo 'Vat... 16 posts

Fernando,

HAvia pensado ( tipo java ) em forçar uma conversão, e, havendo erro ( catch )

Faz isso não, porque não é disparada uma exceção quando a string não é um numero. bq. Exemplo

“banana”.to_i
bq. => 0

Nesse caso regex é a melhor saída mesmo.

Por isso tinha feito duas conversões (p/ float e de volta para string) e uma compraração( com a string original)…

Mas ficou uma pergunta, o que é mais caro, as conversões de tipo ou regex?

 
Avatar nofxx 361 posts
 
Avatar Fernando Luizao 402 posts

Regex são um pouco mais lentas sim… mas são muito mais elegantes =).

nofxx, como vc fez pra postar o código certinho? As tags (ruby e code) ficam cheias de tags html no meio do código comigo…

 
Avatar nofxx 361 posts

Nossa, pra começar, q viagem a minha: 2 =~ . integer no regex ? hehe desconsiderem por favor….

@Fernando: Ueh cara, usei ruby /ruby mesmo.. que será?