2010-02-08 14 views

Respuesta

30

puede utilizar el método de la clase =~String con la expresión regular /\d/ como argumento.

He aquí un ejemplo:

s = 'abc123' 

if s =~ /\d/   # Calling String's =~ method. 
    puts "The String #{s} has a number in it." 
else 
    puts "The String #{s} does not have a number in it." 
end 
5
if /\d/.match(theStringImChecking) then 
    #yep, there's a number in the string 
end 
7

Alternativamente, sin necesidad de utilizar una expresión regular:

def has_digits?(str) 
    str.count("0-9") > 0 
end 
+2

que probablemente sea menos eficiente, si ignora la sobrecarga de compilar la expresión regular (lo cual es justo si la prueba se realiza en un bucle grande o si la cadena a verificar es muy larga). Para un caso degenerativo, su solución debe atravesar toda la cadena, mientras que una expresión regular adecuada se detendrá tan pronto como se encuentre un dígito. –

+0

mientras que este puede no ser eficiente al máximo, es muy legible, lo que puede ser mejor para ciertas situaciones. –

2

En lugar de usar algo como "s = ~/\ d /", voy por las s más cortos [/ \ d /] que devuelve nil para un error (AKA falso en una prueba condicional) o el índice del golpe (también conocido como "true" en una prueba condicional). Si necesita el valor real use s [/ (\ d) /, 1]

Todo debe funcionar igual y es en gran parte una elección del programador.

1
!s[/\d/].nil? 

puede ser una función independiente -

def has_digits?(s) 
    return !s[/\d/].nil? 
end 

o ... de añadir a la clase String hace que sea aún más conveniente -

class String 
    def has_digits? 
    return !self[/\d/].nil? 
    end 
end 
Cuestiones relacionadas