Comment proprement vérifier si la saisie de l'utilisateur est un entier de Ruby?
J'ai un morceau de code où je demande à l'utilisateur de saisir un nombre comme une réponse à ma question.
Je peux faire to_i
mais difficile/ordures entrées de s'échapper à travers to_i
. Par exemple, si un utilisateur entre 693iirum5
comme une réponse #to_i serait la bande à 693
.
S'il vous plaît suggérer une fonction, pas une expression régulière.
Merci d'avance pour la réponse.
- def check_input(entrée) = ~ /^\d+$/ fin OK, sérieusement, pourquoi ne voulez-vous pas une regexp?
Vous devez vous connecter pour publier un commentaire.
Cela va faire pour valider la saisie:
En réponse à camdixon de l' question, je vous soumets cette proposition de solution.
Utiliser la accepté de répondre, mais au lieu de
rescue nil
, utilisezrescue false
et enveloppez votre code dans une si simple.Exemple
Utilisation
input_string.to_i.to_s == input_string
pour vérifier si lainput_string
est un entier ou pas, sans regex.Utiliser Le Noyau#Integer
La Noyau#Entier méthode va augmenter
ArgumentError: invalid value for Integer()
si elle est adoptée une valeur non valide. La description de la méthode dit, en partie:En d'autres termes, alors que String#to_i sera force fonte de la valeur comme un nombre entier, le Noyau#nombre Entier au lieu de s'assurer que la valeur est déjà bien formé avant moulage.
Exemples de Simuler le Comportement de
Integer(gets)
to_i est bien, mais tout dépend de ce que Vous voulez dans le cas de déchets à l'entrée. Néant ? vous pourriez utiliser entier(valeur) et de sauvetage si ce n'est pas un nombre entier, le même avec Flotteur
Si vous voulez 693iirum5 de retourner quelque chose d'autre que vous pourrait analyser la chaîne à l'entrée et vous aurez besoin d'une regex pour vérifier la chaîne. Puisque vous demander de ne pas donner une regex je ne vais pas, peut-être vous pouvez clearify ce que vous voulez vraiment qu'il revienne.
to_i
est très bien. L'OP clairement donne un exemple oùto_i
ne fonctionne pas de la façon que l'OP veut.