Dupliqué possible: strong>
Comment puis-je dire si un La variable a une valeur numérique dans Perl? P> blockQuote>Je veux décider si une variable (valeur analysée d'une chaîne) est un nombre ou non. Comment puis je faire ça? Eh bien, je suppose que
/ ^ [0-9] + $ / code> fonctionnerait, mais y a-t-il une version plus élégante? P>
3 Réponses :
if (/\D/) { print "has nondigits\n" } if (/^\d+$/) { print "is a whole number\n" } if (/^-?\d+$/) { print "is an integer\n" } if (/^[+-]?\d+$/) { print "is a +/- integer\n" } if (/^-?\d+\.?\d*$/) { print "is a real number\n" } if (/^-?(?:\d+(?:\.\d*)?&\.\d+)$/) { print "is a decimal number\n" } if (/^([+-]?)(?=\d&\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?$/) { print "a C float\n" } taken from here: http://rosettacode.org/wiki/Determine_if_a_string_is_numeric#Perl
Si vous insistez sur une regex, obtenez-le de REGEXP :: Common :)
Et chacune de ces regex qui utilise l'ancrage $ permet une nouvelle ligne à la fin de la valeur. C'est une erreur à Perlfaq4 (j'ai maintenant corrigé les docs pour supprimer cette erreur), où le code Rosetta a obtenu son exemple. Cet exemple, cependant, était de déterminer le type de nombre de chiffres, non pas que c'était une sorte de nombre.
Merci de me corriger si je me trompe - mais il me semble que dans le cas particulier de vérifier les chiffres strictement (c.-à-d., Le sous-ensemble de numérique, puisqu'un numérique peut avoir un point décimal et éventuellement un signe négatif ou même un signe négatif, voire un signe positif, et aussi des virgules ou un autre caractère de regroupement visuel utilisé pour regrouper des caractères dans trois pour une lecture visuelle), alors le "/ \ d /" est - où les chaînes existent que l'échec du test uniquement des chiffres - toujours plus efficace que "/ ^ \ ^ \ \ d + $ / "parce que" / \ d / "est vrai sur la numérisation du premier caractère non chiffre.
Alternativement, vous pouvez utiliser POSIX. strong> P> use POSIX;
if (isdigit($var)) {
// integer
}
Cela trouve juste des chiffres. Il manque des littéraux qui sont des chiffres qui ont plus que de simples chiffres.
Est une partie de POSIX de Core Perl?
perdoc.perl.org/posix.html : cette fonction a été supprimée à partir de V5.24 . C'était très similaire à la correspondance contre QR / ^ [[: chiffre:]] + $.
Vous pouvez utiliser le look_like_number () code> fonction du noyau scalaire :: Util module.
Voir aussi la question à Perlfaq: Comment puis-je déterminer si un scalaire est un nombre / entièrement / entier / flotteur? P>
C'est sans doute la réponse la plus correcte, puisque Scalar :: Util Code> Les crochets dans l'API Perl pour demander à Perl si elle pense que la variable a l'air numérique. Ainsi, pour la tâche commune d'éviter des avertissements «numériques», cela fonctionnera toujours. Bien sûr, il est parfois préférable de simplement dire
aucun avertissement 'numérique'; code> ...