.net - valor - validar null en visual basic
¿Cómo puedo verificar si una cadena es nula o está vacía en PowerShell? (10)
¿Existe una función incorporada de tipo IsNullOrEmpty
para verificar si una cadena es nula o está vacía, en PowerShell?
No pude encontrarlo hasta ahora y si hay una forma integrada, no quiero escribir una función para esto.
Además de [string]::IsNullOrEmpty
para verificar si está nulo o vacío, puede lanzar una cadena a un Boolean explícitamente o en expresiones Boolean:
$string = $null
[bool]$string
if (!$string) { "string is null or empty" }
$string = ''''
[bool]$string
if (!$string) { "string is null or empty" }
$string = ''something''
[bool]$string
if ($string) { "string is not null or empty" }
Salida:
False
string is null or empty
False
string is null or empty
True
string is not null or empty
Compruebe la longitud. Si el objeto existe, tendrá una longitud.
Los objetos nulos no tienen longitud, no existen y no se pueden verificar.
Cuerda objeto tiene una longitud.
La pregunta era: IsNull o IsEmpty, NO IsNull o IsEmpty o IsWhiteSpace
#Null
$str1 = $null
$str1.length
($str1 | get-member).TypeName[0]
# Returns big red error
#Empty
$str2 = ""
$str2.length
($str2 | get-member).TypeName[0]
# Returns 0
## Whitespace
$str3 = " "
$str3.length
($str3 | get-member).TypeName[0]
## Returns 1
Otra forma de lograr esto de una manera pura de PowerShell sería hacer algo como esto:
("" -eq ("{0}" -f $val).Trim())
Esto se evalúa correctamente para null, cadena vacía y espacios en blanco. Estoy formateando el valor pasado en una cadena vacía para manejar el valor nulo (de lo contrario, un valor nulo causará un error cuando se llame a Recortar). Luego solo evalúe la igualdad con una cadena vacía. Creo que todavía prefiero el IsNullOrWhiteSpace pero si está buscando otra forma de hacerlo, esto funcionará.
$val = null
("" -eq ("{0}" -f $val).Trim())
>True
$val = " "
("" -eq ("{0}" -f $val).Trim())
>True
$val = ""
("" -eq ("{0}" -f $val).Trim())
>True
$val = "not null or empty or whitespace"
("" -eq ("{0}" -f $val).Trim())
>False
Edit: en un ataque de aburrimiento, jugué con esto un poco y lo hice más corto (aunque más críptico)
!!(("$val").Trim())
o
!(("$val").Trim())
Dependiendo de lo que estés tratando de hacer
Personalmente, no acepto un espacio en blanco ($ STR3) como "no vacío".
Cuando una variable que solo contiene espacios en blanco se pasa a un parámetro, a menudo se producirá un error al indicar que el valor de los parámetros puede no ser ''$ null'', en lugar de decir que puede no ser un espacio en blanco, algunos comandos de eliminación pueden eliminar una carpeta raíz en lugar de una subcarpeta si el nombre de la subcarpeta es un "espacio en blanco", todo esto no acepta una cadena que contiene espacios en blanco en muchos casos.
Me parece que esta es la mejor manera de lograrlo:
$STR1 = $null
IF ([string]::IsNullOrWhitespace($STR1)){''empty''} else {''not empty''}
Vacío
$STR2 = ""
IF ([string]::IsNullOrWhitespace($STR2)){''empty''} else {''not empty''}
Vacío
$STR3 = " "
IF ([string]::IsNullOrWhitespace($STR3)){''empty !! :-)''} else {''not Empty :-(''}
¡¡Vacío!! :-)
$STR4 = "Nico"
IF ([string]::IsNullOrWhitespace($STR4)){''empty''} else {''not empty''}
No vacío
Puedes usar el método estático IsNullOrEmpty
:
[string]::IsNullOrEmpty(...)
Si es un parámetro en una función, puede validarlo con ValidateNotNullOrEmpty
como puede ver en este ejemplo:
Function Test-Something
{
Param(
[Parameter(Mandatory=$true)]
[ValidateNotNullOrEmpty()]
[string]$UserName
)
#stuff todo
}
Tenga en cuenta que las pruebas "if ($str)"
e "IsNullOrEmpty"
no funcionan de manera comparable en todos los casos: una asignación de `$ str = 0 produce falso para ambos, y dependiendo de la semántica del programa deseado, esto podría producir una sorpresa.
Tengo un script de PowerShell que tengo que ejecutar en una computadora tan desactualizada que no tiene [String] :: IsNullOrWhiteSpace (), así que escribí el mío.
function IsNullOrWhitespace($str)
{
if ($str)
{
return ($str -replace " ","" -replace "`t","").Length -eq 0
}
else
{
return $TRUE
}
}
Ustedes están haciendo esto muy difícil. PowerShell maneja esto con bastante elegancia, por ejemplo:
> $str1 = $null
> if ($str1) { ''not empty'' } else { ''empty'' }
empty
> $str2 = ''''
> if ($str2) { ''not empty'' } else { ''empty'' }
empty
> $str3 = '' ''
> if ($str3) { ''not empty'' } else { ''empty'' }
not empty
> $str4 = ''asdf''
> if ($str4) { ''not empty'' } else { ''empty'' }
not empty
> if ($str1 -and $str2) { ''neither empty'' } else { ''one or both empty'' }
one or both empty
> if ($str3 -and $str4) { ''neither empty'' } else { ''one or both empty'' }
neither empty
# cases
$x = null
$x = ''''
$x = '' ''
# test
if ($x -and $x.trim()) {''not empty''} else {''empty''}
or
if ([string]::IsNullOrWhiteSpace($x)) {''empty''} else {''not empty''}