Devo controllare se una stringa contiene almeno un numero in esso utilizzando Ruby (e presumo una sorta di espressione regolare?).Come si verifica se una stringa contiene almeno un numero utilizzando Ruby?
Come faccio?
Devo controllare se una stringa contiene almeno un numero in esso utilizzando Ruby (e presumo una sorta di espressione regolare?).Come si verifica se una stringa contiene almeno un numero utilizzando Ruby?
Come faccio?
È possibile utilizzare il metodo =~
della classe String
con la regex /\d/
come argomento.
Ecco un esempio:
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
if /\d/.match(theStringImChecking) then
#yep, there's a number in the string
end
In alternativa, senza usare un espressione regolare:
def has_digits?(str)
str.count("0-9") > 0
end
è probabilmente meno efficiente, se si ignora il sovraccarico di compilazione dell'espressione regolare (che è corretto se il test viene eseguito in un loop di grandi dimensioni o se la stringa da controllare è molto lunga). Per un caso degenerativo, la soluzione deve attraversare l'intera stringa mentre una corretta espressione regolare si interromperà non appena viene trovata una cifra. –
mentre questo potrebbe non essere al massimo efficiente, è molto leggibile che può essere migliore per determinate situazioni. –
Invece di usare qualcosa come "s = ~/\ d /", vado per le s più brevi [/ \ d /] che restituisce nil per una miss (AKA false in un test condizionale) o l'indice del colpo (AKA true in un test condizionale). Se hai bisogno del valore attuale usa s [/ (\ d) /, 1]
Dovrebbe funzionare tutto allo stesso modo ed è in gran parte la scelta di un programmatore.
!s[/\d/].nil?
può essere una funzione autonoma -
def has_digits?(s)
return !s[/\d/].nil?
end
o ... aggiungendolo alla classe String rende ancora più conveniente -
class String
def has_digits?
return !self[/\d/].nil?
end
end
http: //public.kvalley. com/regex/regex.asp –