Y a-t-il une fonction intégrée similaire à IsNullOrEmpty
pour vérifier si une chaîne est nulle ou vide, en PowerShell ?
Je n'ai pas encore trouvé et s'il existe une méthode intégrée, je ne veux pas écrire une fonction pour cela.
Y a-t-il une fonction intégrée similaire à IsNullOrEmpty
pour vérifier si une chaîne est nulle ou vide, en PowerShell ?
Je n'ai pas encore trouvé et s'il existe une méthode intégrée, je ne veux pas écrire une fonction pour cela.
Une autre alternative consiste à ajouter 2 nouveaux Méthodes de script aux instances de System.String
en utilisant Update-TypeData
:
Update-TypeData -MemberType ScriptMethod -MemberName IsNullOrEmpty -Value {
return [string]::IsNullOrEmpty($this)
} -TypeName System.String
Update-TypeData -MemberType ScriptMethod -MemberName IsNullOrWhiteSpace -Value {
return [string]::IsNullOrWhiteSpace($this)
} -TypeName System.String
'hello'.IsNullOrEmpty() # => False
''.IsNullOrEmpty() # => True
' '.IsNullOrEmpty() # => False
' '.IsNullOrWhiteSpace() # => True
En adressant la lacune tangentielle de la réponse de @KeithHill qui ne couvrait pas le cas IsNullOrWhitespace
, dans PowerShell 7.1 et plus tard, nous pouvons utiliser l' opérateur de membre conditionnel null pour vérifier gracieusement si une chaîne est nulle ou vide sans avoir besoin de vérifier d'abord que la chaîne n'est pas $null
nous-mêmes, tout en évitant l'utilisation de [string]::IsNullOrWhitespace(string)
.
Remarque : Vous pouvez également le faire avec PowerShell 7.0 si vous activez la fonctionnalité expérimentale
PSNullConditionalOperators
:Enable-ExperimentalFeature -Name PSNullConditionalOperators
Pour utiliser l'exemple $str3
de la réponse de Keith (et en faisant semblant que l'opérateur ternaire n'existe pas depuis 7.0 pour plus de clarté) :
$str3 = ' '
if ( ${str3}?.Trim() ) {
'pas vide ou espace blanc'
} else {
'vide ou espace blanc'
}
vide ou espace blanc
.Trim()
est seulement invoqué si $str3
est une valeur non nulle, sinon $null
est retourné à la place.
Une chose à se rappeler est qu'un point d'interrogation ?
est valide comme partie d'un nom de variable. C'est pourquoi nous devons d'abord dissocier le nom de la variable avant d'appliquer l'opérateur d'accès conditionnel comme ceci : ${str3}
Puisque j'ai mentionné l'opérateur ternaire plus tôt, et puisque cette réponse tourne déjà autour de PowerShell 7.1 et ultérieur, vous pouvez simplifier le bloc de code ci-dessus en utilisant l'opérateur ternaire, en enlevant presque entièrement l'inutile déclaration si/alors/sinon
:
${str3}?.Trim() ? 'pas vide ou espace blanc' : 'vide ou espace blanc'
L' opérateur ternaire est une version simplifiée de l'instruction si/alors/sinon
pour des conditions de base. Je ne veux pas embrouiller les pistes avec les nuances autour de cela, mais comprenez-le comme "si le côté gauche du unique point d'interrogation ?
est vrai, exécutez ce qui est à droite du ?
, sinon exécutez ce qui vient après les deux-points :
".
Vous pouvez en lire davantage sur l'opérateur ternaire dans la documentation PowerShell.
Vous pourriez créer un filtre qui convertit les chaînes vides en valeurs nulles, puis vous n'auriez plus qu'à vérifier la valeur nulle.
filter nullif {@($_, $null)[$_ -eq '']}
Ensuite, vous devez simplement rediriger votre valeur vers celui-ci
('' | nullif) -eq $null
> Vrai
('x' | nullif) -eq $null
> Faux
Une méthode encore plus facile serait d'utiliser une regex
$null -match '^$'
> Vrai
'' -match '^$'
> Vrai
'x' -match '^$'
> Faux
Une extension de la réponse de Keith Hill (pour tenir compte des espaces blancs) :
$str = " "
if ($str -and $version.Trim()) { Write-Host "Pas vide" } else { Write-Host "Vide" }
Ceci renvoie "Vide" pour les valeurs nulles, les chaînes vides et les chaînes avec des espaces blancs, et "Pas vide" pour tout le reste.
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.
2 votes
Espérons que cela aide rkeithhill.wordpress.com/2007/01/06/…
10 votes
Eh bien, vous utilisez .NET, donc ne pouvez-vous pas appeler
String.IsNullOrEmpty
?