15 votes

Vérifier si une chaîne de caractères contient une valeur numérique dans PowerShell ?

Je veux vérifier si une chaîne de caractères contient une valeur numérique. J'ai ce code :

$string = "some string that contains 123456     in the middle"
$substring = $string.substring(27,9).Trim()

J'ai $substring qui va contenir "123456" et j'ai trouvé cette fonction IsNumeric ici : Dans PowerShell, comment puis-je tester si une variable contient une valeur numérique ?

Le problème est que lorsque je l'extrais de $string, il se comporte comme un type de chaîne de caractères et IsNumeric renvoie false puisqu'il le compare à tous les types numériques. et même s'il contient un nombre, la sortie de IsNumeric sera false.

Existe-t-il un meilleur moyen de vérifier si une chaîne de caractères contient des valeurs numériques ?

28voto

boxdog Points 4870

Vous pouvez utiliser une correspondance par expression régulière pour le tester :

if($substring -match "^\d+$")
{
   # Do something
}

Cela devrait fonctionner pour toute chaîne qui ne contient que des chiffres (c'est-à-dire un nombre entier positif). Changez le motif en ^-?\d+$ si vous voulez inclure les entiers négatifs.

18voto

colsw Points 2360

La manière correcte de vérifier si une chaîne de caractères donnée peut être transformée en un nombre :

[string]$InString = "123456"
[Int32]$OutNumber = $null

if ([Int32]::TryParse($InString,[ref]$OutNumber)){
    Write-Host "Valid Number"
    $OutNumber
} else {
    Write-Host "Invalid Number"
    #error code here
}

puis $OutNumber contiendra le nombre en tant que type numérique.

10voto

Robert Cotterman Points 1401

En regex \d est la vérification des chiffres

\d * vérifie les chiffres de 0 à l'infini

\d ? Vérifie la présence de 0 à 1 chiffre

\d {0,5} vérifie la présence de 0 à 5 chiffres

\d + vérifie les chiffres de 1 à infini

^ est le début d'une ligne

$ est la fin d'une ligne

Alors

^ \d +$ vérifiera la présence d'un ou plusieurs chiffres du début à la fin de la ligne et uniquement des chiffres. Tout autre symbole interrompra la connexion du début à la fin et ne sera pas trouvé.

4voto

f6a4 Points 941

La méthode traditionnelle utilisant le cadre .NET :

if( [Microsoft.VisualBasic.Information]::IsNumeric($myString) ) {
  # do something
}

-1voto

Simon B Points 166

Utiliser -match ' \d '

string = "some string that contains 123456     in the middle"
$substring = $string.substring(27,9).Trim()
$substring -match '\d'

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X