Eh bien, voici le moyen le plus simple :
class String
def is_integer?
self.to_i.to_s == self
end
end
>> "12".is_integer?
=> true
>> "blah".is_integer?
=> false
Je ne suis pas d'accord avec les solutions qui provoquent une exception pour convertir la chaîne de caractères - les exceptions ne sont pas un flux de contrôle, et vous pourriez aussi bien le faire de la bonne façon. Cela dit, ma solution ci-dessus ne traite pas les entiers qui ne sont pas en base 10. Voici donc la façon de le faire sans recourir aux exceptions :
class String
def integer?
[ # In descending order of likeliness:
/^[-+]?[1-9]([0-9]*)?$/, # decimal
/^0[0-7]+$/, # octal
/^0x[0-9A-Fa-f]+$/, # hexadecimal
/^0b[01]+$/ # binary
].each do |match_pattern|
return true if self =~ match_pattern
end
return false
end
end
1 votes
Duplicata possible de Tester si une chaîne est un nombre en Ruby on Rails
2 votes
Soyez prudent en utilisant des solutions reposant sur des expressions régulières. Les tests de référence montrent qu'elles s'exécutent beaucoup plus lentement que le code régulier.