在PowerShell中,是否有内置的isnullorempty类函数来检查字符串是否为空?

到目前为止我找不到它,如果有内置的方法,我不想为此写一个函数。


当前回答

# cases
$x = null
$x = ''
$x = ' '

# test
if ($x -and $x.trim()) {'not empty'} else {'empty'}
or
if ([string]::IsNullOrWhiteSpace($x)) {'empty'} else {'not empty'}

其他回答

在纯PowerShell中完成这一任务的另一种方法是这样做:

("" -eq ("{0}" -f $val).Trim())

此方法成功计算null、空字符串和空白。我正在将传递的值格式化为空字符串以处理null(否则null将在调用Trim时导致错误)。然后用空字符串求相等值。我想我仍然更喜欢IsNullOrWhiteSpace,但如果您正在寻找另一种方法来实现它,那么这个方法也可以。

$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

在一阵无聊中,我玩了一些,并把它缩短了(尽管更神秘):

!!(("$val").Trim())

or

!(("$val").Trim())

这取决于你想做什么。

# cases
$x = null
$x = ''
$x = ' '

# test
if ($x -and $x.trim()) {'not empty'} else {'empty'}
or
if ([string]::IsNullOrWhiteSpace($x)) {'empty'} else {'not empty'}

另一种选择是向系统中添加2个新的脚本方法。使用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

凯斯·希尔(Keith Hill)的回答(为了解释空白)的延伸:

$str = "     "
if ($str -and $version.Trim()) { Write-Host "Not Empty" } else { Write-Host "Empty" }

对于空字符、空字符串和有空格的字符串,返回“Empty”,对于其他所有字符,返回“Not Empty”。

您可以创建一个过滤器,将空字符串转换为null,然后只需检查是否为null。

filter nullif {@($_, $null)[$_ -eq '']}

然后你只需要将你的价值注入其中

('' | nullif) -eq $null
> True
('x' | nullif) -eq $null
> False

一个更简单的方法是使用正则表达式

$null -match '^$'
> True
'' -match '^$'
> True
'x' -match '^$'
> False