Dans PowerShell, comment puis-je tester si une variable contient une valeur numérique?
Dans PowerShell, comment puis-je tester si une variable contient une valeur numérique?
Actuellement, je suis en train de le faire comme cela, mais il semble toujours revenir false
.
add-type -Language CSharpVersion3 @'
public class Helpers {
public static bool IsNumeric(object o) {
return o is byte || o is short || o is int || o is long
|| o is sbyte || o is ushort || o is uint || o is ulong
|| o is float || o is double || o is decimal
;
}
}
'@
filter isNumeric($InputObject) {
[Helpers]::IsNumeric($InputObject)
}
PS> 1 | isNumeric
False
Vous devez vous connecter pour publier un commentaire.
Modifier votre filtre comme ceci:
function
utilise le$input
variable pour contenir pipeline d'informations, tandis que lafilter
utilise la variable spéciale$_
qui contient le pipeline actuel de l'objet.Edit:
Pour une powershell syntaxe façon, vous pouvez simplement utiliser un filtre (w/o add-type):
$_ -is [int]
fonctionne aussi pour vérifier un intVous pouvez vérifier si la variable est un nombre comme ceci:
$val -is [int]
Cela fonctionnera pour les valeurs numériques, mais pas si le nombre est enveloppé dans des citations:
1.5
n'est pas un nombre entier, c'est une double...1.5 -is [double]
évalue à trueSi l'on analyse une chaîne de caractères pour une valeur numérique, vous pouvez utiliser une expression régulière et la
-match
comparaison. Sinon, Christian réponse est une bonne solution pour la vérification de type."1.2.3" -match "^[\d\.]+$"
--> Vrai."^(\d+|\.\d+|\d+\.\d+)$"
ne permettrait qu'un séparateur décimal. Retourne true pour "1", ".1", "1.1" et false pour les "1.", "1.1.1", "".Vous pouvez faire quelque chose comme :
ou
Retourne "True" si $testvar est un nombre
http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.information.isnumeric.aspx
"1.23"
qui n'est pas ce que je veux. Je veux savoir si le type de l'objet réel est un type numérique, pas de savoir si ou non il peut être contraint à un type numérique. Merci pour l'astuce cependant, je peux voir où cela sera très pratique.-est et que les opérateurs nécessite un type que vous pouvez comparer. Si vous n'êtes pas sûr de ce que le type peut-être, essayer d'évaluer le contenu (de type partiel liste):
Bonne ou mauvaise, elle peut aller à l'encontre des valeurs hexadécimales ainsi (Invoke-Expression '0xA' ...)
Invoke-Expression
pourrait être assez douteux!Si vous voulez vérifier si une chaîne a une valeur numérique, utilisez ce code:
Les crédits vont ici
Merci à vous tous qui ont contribué à ce fil et m'a aidé à comprendre comment tester pour les valeurs numériques. Je voulais poster mes résultats pour la façon de gérer les nombres négatifs, pour ceux qui peuvent également trouver ce fil lors de la recherche...
Note: Ma fonction nécessite une chaîne de caractères pour être adoptée, en raison de l'utilisation Trim().
^[-+]?([0-9]*\.[0-9]+|[0-9]+\.?)$
qui permettra de valider que vous avez seulement une option plus/moins; les numéros et une seule option de point décimal.J'ai couru dans cette rubrique tout en travaillant sur la validation d'entrée avec read-host. Si j'ai essayé de spécifier le type de données de la variable dans le cadre de la lecture de l'hôte de commande et l'utilisateur a entré quelque chose d'autre que ce type de données en lecture-hôte serait l'erreur. C'est de cette façon que j'ai obtenu et veillé à ce que l'utilisateur entre le type de données que je voulais:
-
-
-
Tester si une valeur numérique ou une chaîne représentant une valeur numérique.
Tester si une valeur est numérique.
$n=0; [Double]::TryParse('1e2', [ref]$n)
va l'analyser comme une représentation de chaîne d'un nombre, mais vos fonctions échec. Même avec des nombres négatifs.